Compare commits
2
Commits
moreplayers
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9aa317ea09 | ||
|
|
aa500be7c6 |
Vendored
-13
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
// Legacy source files use CP949 (Korean Windows encoding, superset of EUC-KR).
|
|
||||||
// VS Code defaults to UTF-8, which silently corrupts the Korean comment bytes
|
|
||||||
// on save. Setting encoding to cp949 here preserves them exactly.
|
|
||||||
"files.encoding": "cp949",
|
|
||||||
|
|
||||||
// Let VS Code try to detect encoding per-file, falling back to cp949 above.
|
|
||||||
"files.autoGuessEncoding": true,
|
|
||||||
|
|
||||||
// Preserve the original Windows CRLF line endings (Git's * -text in
|
|
||||||
// .gitattributes also prevents conversion, but this keeps VS Code consistent).
|
|
||||||
"files.eol": "\r\n"
|
|
||||||
}
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
Mech,In_game_playable,Tech,Chassis_Tonnage,Max_Loadout_Tonnage,Armor_Type,Internal_Type,Heatsinks,Heatsink_Type,JumpJets_Installed,CanLoad_JJ,CanLoad_ECM,CanLoad_BAP,CanLoad_AMS,OmniSlots,Equipment,Armor_LeftArm,Armor_RightArm,Armor_LeftLeg,Armor_RightLeg,Armor_LeftFrontTorso,Armor_RightFrontTorso,Armor_CenterFrontTorso,Armor_CenterRearTorso,Armor_Head,Total_Armor_Multiplier,Weapon_Count,Weapons_Summary,Weapons_With_Locations,Default_Installed_Locations,Available_Slot_Capacity_By_Zone,Available_Hardpoints,notes
|
|
||||||
Annihilator,Yes,IS,23.000000,100.000000,Reflective,EndoSteel,17,Single,0,No,Yes,Yes,Yes,43,,1.8,1.8,1.8,1.8,1.85,1.85,2.0,0.8,0.3,14,10,"4x ClanERSmallLaser, 2x ClanMachineGun, 4x ClanUltraAC5",ClanERSmallLaser@LeftTorso(Front) G1 | ClanERSmallLaser@CenterTorso(Front) G1 | ClanERSmallLaser@CenterTorso(Front) G1 | ClanERSmallLaser@RightTorso(Front) G1 | ClanMachineGun@LeftTorso(Front) G1 | ClanMachineGun@RightTorso(Front) G1 | ClanUltraAC5@LeftArm(Front) G1 | ClanUltraAC5@LeftArm(Front) G1 | ClanUltraAC5@RightArm(Front) G1 | ClanUltraAC5@RightArm(Front) G1,LeftTorsox2 | CenterTorsox2 | RightTorsox2 | LeftArmx2 | RightArmx2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Front) | Head(Unknown),
|
|
||||||
Archer,Yes,IS,17.000000,70.000000,Standard,Standard,20,Single,1,Yes,Yes,Yes,Yes,43,,1.1,1.1,1.2,1.2,1.4,1.4,1.5,0.5,0.3,9.7,9,"4x MediumPulseLaser, 2x SSRM2, 2x LRM15, NarcBeacon",MediumPulseLaser@LeftArm(Front) G1 | MediumPulseLaser@CenterTorso(Front) G1 | MediumPulseLaser@CenterTorso(Front) G1 | MediumPulseLaser@RightArm(Front) G1 | SSRM2@LeftArm(Front) G2 | SSRM2@RightArm(Front) G2 | LRM15@LeftTorso(Side) G2 | LRM15@RightTorso(Side) G2 | NarcBeacon@LeftTorso(Front) G3,LeftArmx2 | CenterTorsox2 | RightArmx2 | LeftTorsox2 | RightTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front+Side) | RightTorso(Side) | CenterTorso(Front) | Head(Unknown),
|
|
||||||
ArcticWolf,Yes,Clan,9.500000,40.000000,FerroFiberus,EndoSteel,8,Single,1,Yes,Yes,Yes,Yes,43,,0.7,0.7,0.95,0.95,0.85,0.85,1.0,0.2,0.3,6.5,6,"2x ClanSmallPulseLaser, 4x ClanSSRM4",ClanSmallPulseLaser@RightTorso(Front) G1 | ClanSmallPulseLaser@RightTorso(Front) G1 | ClanSSRM4@leftarm(Front) G2 | ClanSSRM4@special1(Front) G2 | ClanSSRM4@special2(Front) G2 | ClanSSRM4@rightarm(Front) G2,RightTorsox2 | leftarmx1 | special1x1 | special2x1 | rightarmx1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O8) | RightTorso(M0/P0/B0/O8) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O4) | Special2(M0/P0/B0/O4),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown) | Special1(Unknown) | Special2(Unknown),
|
|
||||||
Ares,Yes,Clan,15.500000,60.000000,FerroFiberus,Standard,15,Single,0,Yes,Yes,Yes,Yes,46,,0.9,0.9,1.15,1.15,1.1,1.1,1.45,0.9,0.25,8.9,9,"2x ClanERSmallLaser, 3x ClanERMediumLaser, ClanERLargeLaser, 3x ClanLRM10",ClanERSmallLaser@Special1(Front) G1 | ClanERSmallLaser@Special1(Front) G1 | ClanERMediumLaser@LeftArm(Front) G1 | ClanERMediumLaser@RightArm(Front) G1 | ClanERMediumLaser@RightArm(Front) G1 | ClanERLargeLaser@LeftArm(Front) G1 | ClanLRM10@Special2(Side) G2 | ClanLRM10@Special2(Side) G2 | ClanLRM10@Special2(Side) G2,Special1x2 | LeftArmx2 | RightArmx2 | Special2x3,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O2) | Special2(M0/P0/B0/O3),LeftArm(Front) | RightArm(Front) | LeftTorso(Unknown) | RightTorso(Unknown) | Head(Unknown) | Special1(Front) | Special2(Side),
|
|
||||||
Argus,Yes,IS,14.500000,60.000000,Standard,Standard,13,Single,0,No,Yes,Yes,Yes,43,,0.7,0.7,1.15,1.15,0.85,0.85,1.45,0.9,0.3,8.05,9,"3x MediumLaser, PPC, 4x MachineGun, LRM10",MediumLaser@Lefttorso(Front) G1 | MediumLaser@Righttorso(Front) G1 | MediumLaser@RightArm(Front) G1 | PPC@RightArm(Front) G1 | MachineGun@LeftTorso(Front) G1 | MachineGun@CenterTorso(Front) G1 | MachineGun@CenterTorso(Front) G1 | MachineGun@RightTorso(Front) G1 | LRM10@LeftArm(Front) G2,Lefttorsox1 | Righttorsox1 | RightArmx2 | LeftTorsox1 | CenterTorsox2 | RightTorsox1 | LeftArmx1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Front) | Head(Unknown),
|
|
||||||
Assassin2,Yes,IS,12.000000,45.000000,FerroFiberus,EndoSteel,6,Single,0,Yes,Yes,Yes,Yes,40,,0.85,0.85,0.85,0.85,0.9,0.9,1.05,0.45,0.25,6.95,7,"2x SmallLaser, 2x MediumLaser, 2x SRM4, LRM5",SmallLaser@LeftArm(Front) G1 | SmallLaser@RightArm(Front) G1 | MediumLaser@LeftArm(Front) G1 | MediumLaser@RightArm(Front) G1 | SRM4@LeftTorso(Front) G2 | SRM4@RightTorso(Front) G2 | LRM5@Special1(Side) G2,LeftArmx2 | RightArmx2 | LeftTorsox1 | RightTorsox1 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O10) | Special1(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | Special1(Side),
|
|
||||||
Atlas,Yes,IS,28.000000,100.000000,Standard,Standard,17,Single,0,No,Yes,Yes,Yes,43,,1.95,1.95,2.15,2.15,2.45,2.45,2.2,1.1,0.3,16.7,9,"4x MediumLaser, AC20, 2x SSRM2, SRM6, LRM20",MediumLaser@LeftArm(Front) G1 | MediumLaser@Head(Front) G1 | MediumLaser@CenterTorso(Front) G1 | MediumLaser@RightArm(Front) G1 | AC20@Special1(Front) G1 | SSRM2@LeftTorso(Front) G2 | SSRM2@RightTorso(Front) G2 | SRM6@Special2(Front) G2 | LRM20@LeftTorso(Side) G2,LeftArmx1 | Headx1 | CenterTorsox1 | RightArmx1 | Special1x1 | LeftTorsox2 | RightTorsox1 | Special2x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O10) | RightTorso(M0/P0/B0/O8) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O4) | Special2(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Front+Side) | RightTorso(Front) | CenterTorso(Front) | Head(Front) | Special1(Front) | Special2(Front),
|
|
||||||
Avatar,Yes,IS,17.000000,70.000000,Reactive,EndoSteel,12,Single,0,Yes,Yes,Yes,Yes,43,,1.3,1.3,1.5,1.5,1.6,1.6,1.75,0.5,0.3,11.35,10,"4x MachineGun, 2x LargeLaser, 2x LRM5, 2x LRM10",MachineGun@LeftArm(Front) G1 | MachineGun@Special1(Front) G1 | MachineGun@Special1(Front) G1 | MachineGun@RightArm(Front) G1 | LargeLaser@LeftArm(Front) G1 | LargeLaser@RightArm(Front) G1 | LRM5@LeftTorso(Side) G2 | LRM5@RightTorso(Side) G2 | LRM10@LeftTorso(Side) G2 | LRM10@RightTorso(Side) G2,LeftArmx2 | Special1x2 | RightArmx2 | LeftTorsox2 | RightTorsox2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Side) | RightTorso(Side) | Head(Unknown) | Special1(Front),
|
|
||||||
Awesome,Yes,IS,23.000000,80.000000,Standard,Standard,28,Single,0,No,Yes,Yes,Yes,43,,1.45,1.45,1.55,1.55,1.65,1.65,1.75,1.25,0.3,12.6,6,"SmallPulseLaser, 3x ERPPC, UltraAC5, LRM5",SmallPulseLaser@Head(Front) G1 | ERPPC@Lefttorso(Front) G1 | ERPPC@righttorso(Front) G1 | ERPPC@RightArm(Front) G1 | UltraAC5@LeftArm(Front) G1 | LRM5@CenterTorso(Side) G2,Headx1 | Lefttorsox1 | righttorsox1 | RightArmx1 | LeftArmx1 | CenterTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Unknown) | RightTorso(Unknown) | CenterTorso(Side) | Head(Front),
|
|
||||||
Battlemaster,Yes,IS,20.500000,85.000000,Standard,EndoSteel,25,Single,0,No,Yes,Yes,Yes,43,,1.45,1.45,1.6,1.6,1.8,1.8,2.05,0.95,0.3,13,10,"PPC, 6x MediumLaser, 2x MachineGun, SRM6",PPC@Special2(Front) G1 | MediumLaser@RightTorso(Front) G1 | MediumLaser@RightTorso(Front) G1 | MediumLaser@RightTorso(Rear) G1 | MediumLaser@LeftTorso(Front) G1 | MediumLaser@LeftTorso(Front) G1 | MediumLaser@LeftTorso(Rear) G1 | MachineGun@LeftArm(Front) G1 | MachineGun@LeftArm(Front) G1 | SRM6@Special1(Front) G2,Special2x1 | RightTorsox3 | LeftTorsox3 | LeftArmx2 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O4) | LeftTorso(M0/P0/B0/O9) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O3) | Special2(M0/P0/B0/O4),LeftArm(Front) | RightArm(Unknown) | LeftTorso(Front+Rear) | RightTorso(Front+Rear) | CenterTorso(Unknown) | Head(Unknown) | Special1(Front) | Special2(Front),
|
|
||||||
Battlemaster2c,Yes,Clan,15.500000,85.000000,Standard,EndoSteel,25,Single,0,No,Yes,Yes,Yes,39,,1.45,1.45,1.6,1.6,1.8,1.8,2.05,0.95,0.3,13,10,"ClanERPPC, 6x ClanERMediumLaser, 2x ClanGaussRifle, ClanSSRM6",ClanERPPC@RightArm(Front) G1 | ClanERMediumLaser@RightTorso(Front) G1 | ClanERMediumLaser@RightTorso(Front) G1 | ClanERMediumLaser@RightTorso(Rear) G1 | ClanERMediumLaser@LeftTorso(Front) G1 | ClanERMediumLaser@LeftTorso(Front) G1 | ClanERMediumLaser@LeftTorso(Rear) G1 | ClanGaussRifle@LeftArm(Front) G1 | ClanGaussRifle@LeftArm(Front) G1 | ClanSSRM6@Special1(Front) G2,RightArmx1 | RightTorsox3 | LeftTorsox3 | LeftArmx2 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O4) | LeftTorso(M0/P0/B0/O9) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O3),LeftArm(Front) | RightArm(Front) | LeftTorso(Front+Rear) | RightTorso(Front+Rear) | CenterTorso(Unknown) | Head(Unknown) | Special1(Front),
|
|
||||||
Behemoth,Yes,Clan,22.000000,100.000000,Standard,Standard,21,Single,1,Yes,Yes,Yes,Yes,43,,1.95,1.95,2.15,2.15,2.45,2.45,2.2,1.1,0.3,16.7,7,"4x ClanLargePulseLaser, 2x ClanGaussRifle, LargeLaser",ClanLargePulseLaser@LeftTorso(Front) G1 | ClanLargePulseLaser@LeftTorso(Front) G1 | ClanLargePulseLaser@RightTorso(Front) G1 | ClanLargePulseLaser@RightTorso(Front) G1 | ClanGaussRifle@LeftArm(Front) G1 | ClanGaussRifle@RightArm(Front) G1 | LargeLaser@Special1(Front) G1,LeftTorsox2 | RightTorsox2 | LeftArmx1 | RightArmx1 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | Head(Unknown) | Special1(Front),
|
|
||||||
Behemoth2,Yes,Clan,22.000000,100.000000,Standard,Standard,21,Single,1,Yes,Yes,Yes,Yes,43,,1.95,1.95,2.15,2.15,2.45,2.45,2.2,1.1,0.3,16.7,7,"4x ClanLargePulseLaser, 2x ClanGaussRifle, LargeLaser",ClanLargePulseLaser@LeftTorso(Front) G1 | ClanLargePulseLaser@LeftTorso(Front) G1 | ClanLargePulseLaser@RightTorso(Front) G1 | ClanLargePulseLaser@RightTorso(Front) G1 | ClanGaussRifle@LeftArm(Front) G1 | ClanGaussRifle@RightArm(Front) G1 | LargeLaser@Special1(Front) G1,LeftTorsox2 | RightTorsox2 | LeftArmx1 | RightArmx1 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | Head(Unknown) | Special1(Front),
|
|
||||||
Blackhawk,Yes,Clan,10.000000,50.000000,FerroFiberus,EndoSteel,12,Single,0,Yes,Yes,Yes,Yes,43,,0.9,0.9,0.95,0.95,1.05,1.05,1.2,0.55,0.25,7.8,4,"2x ClanMediumPulseLaser, 2x ClanERPPC",ClanMediumPulseLaser@LeftTorso(Front) G1 | ClanMediumPulseLaser@RightTorso(Front) G1 | ClanERPPC@LeftArm(Front) G1 | ClanERPPC@RightArm(Front) G1,LeftTorsox1 | RightTorsox1 | LeftArmx1 | RightArmx1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O10) | RightTorso(M0/P0/B0/O10) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O2) | Special2(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown) | Special1(Unknown) | Special2(Unknown),
|
|
||||||
Blackheart,No,Clan,14.000000,70.000000,FerroFiberus,Standard,0,,0,No,Yes,No,No,6,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P3/B0/O0) | RightArm(M0/P3/B0/O0) | LeftTorso(M0/P0/B1/O2) | RightTorso(M0/P0/B1/O2) | CenterTorso(M0/P0/B0/O2),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown) | CenterTorso(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
Blacklanner,Yes,Clan,12.500000,55.000000,FerroFiberus,EndoSteel,10,Single,0,No,Yes,Yes,Yes,40,ECM,0.9,0.9,1.0,1.0,1.05,1.05,1.15,0.75,0.25,8.05,5,"2x ClanERMediumLaser, ClanERLargeLaser, ClanSRM6, ClanLRM10",ClanERMediumLaser@LeftArm(Front) G1 | ClanERMediumLaser@LeftArm(Front) G1 | ClanERLargeLaser@RightArm(Front) G1 | ClanSRM6@Special2(Side) G2 | ClanLRM10@Special1(Side) G2,LeftArmx2 | RightArmx1 | Special2x1 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | Special1(M0/P0/B0/O12) | Special2(M0/P0/B0/O12),LeftArm(Front) | RightArm(Front) | Special1(Side) | Special2(Side),
|
|
||||||
Blacknight,Yes,IS,16.000000,75.000000,Standard,Standard,22,Single,0,Yes,Yes,Yes,Yes,43,,1.2,1.2,1.4,1.4,1.55,1.55,1.8,0.8,0.3,11.2,8,"SmallLaser, 4x MediumLaser, 2x LargeLaser, PPC",SmallLaser@Head(Front) G1 | MediumLaser@LeftArm(Front) G1 | MediumLaser@LeftTorso(Front) G1 | MediumLaser@RightTorso(Front) G1 | MediumLaser@RightArm(Front) G1 | LargeLaser@LeftTorso(Front) G1 | LargeLaser@RightTorso(Front) G1 | PPC@RightArm(Front) G1,Headx1 | LeftArmx1 | LeftTorsox2 | RightTorsox2 | RightArmx2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Front),
|
|
||||||
Bowman,No,Clan,16.000000,70.000000,FerroFiberus,Standard,0,,0,No,Yes,Yes,No,5,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P2/B2/O2) | RightArm(M4/P0/B0/O0) | Special1(M4/P0/B0/O0) | Special2(M0/P0/B0/O3),LeftArm(Unknown) | RightArm(Unknown) | Special1(Unknown) | Special2(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
Brigand,Yes,IS,7.000000,25.000000,FerroFiberus,Standard,10,Single,0,Yes,Yes,Yes,Yes,40,,0.45,0.45,0.45,0.45,0.55,0.55,0.55,0.4,0.25,4.1,4,"2x MediumPulseLaser, 2x MediumLaser",MediumPulseLaser@LeftArm(Front) G1 | MediumPulseLaser@RightArm(Front) G1 | MediumLaser@Special2(Front) G1 | MediumLaser@Special1(Front) G1,LeftArmx1 | RightArmx1 | Special2x1 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | Special1(M0/P0/B0/O12) | Special2(M0/P0/B0/O12),LeftArm(Front) | RightArm(Front) | Special1(Front) | Special2(Front),
|
|
||||||
Bushwacker,Yes,IS,15.500000,55.000000,FerroFiberus,Standard,11,Single,0,No,Yes,Yes,Yes,43,,0.9,0.9,1.1,1.1,1.15,1.15,1.35,0.5,0.25,8.4,8,"2x MediumLaser, ERLargeLaser, 2x MachineGun, AC10, 2x LRM5",MediumLaser@CenterTorso(Front) G1 | MediumLaser@CenterTorso(Front) G1 | ERLargeLaser@RightArm(Front) G1 | MachineGun@LeftTorso(Front) G1 | MachineGun@RightTorso(Front) G1 | AC10@LeftArm(Front) G1 | LRM5@Special1(Side) G2 | LRM5@Special1(Side) G2,CenterTorsox2 | RightArmx1 | LeftTorsox1 | RightTorsox1 | LeftArmx1 | Special1x2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O8) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O4),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Front) | Head(Unknown) | Special1(Side),
|
|
||||||
Canis,No,Clan,15.000000,80.000000,FerroFiberus,EndoSteel,0,,0,Yes,No,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P0/B5/O0) | RightArm(M0/P0/B5/O0) | Special1(M0/P3/B0/O0) | Special2(M0/P3/B0/O0),LeftArm(Unknown) | RightArm(Unknown) | Special1(Unknown) | Special2(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
Catapult,Yes,IS,15.000000,65.000000,Reactive,Standard,10,Single,1,Yes,Yes,Yes,Yes,43,BAP,1.45,1.45,1.35,1.35,1.45,1.45,1.5,0.65,0.3,10.95,4,"2x LargeLaser, 2x LRM20",LargeLaser@LeftTorso(Front) G1 | LargeLaser@RightTorso(Front) G1 | LRM20@LeftArm(Side) G2 | LRM20@RightArm(Side) G2,LeftTorsox1 | RightTorsox1 | LeftArmx1 | RightArmx1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Side) | RightArm(Side) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
CauldronBorn,Yes,Clan,13.500000,65.000000,FerroFiberus,EndoSteel,13,Single,0,Yes,Yes,Yes,Yes,43,,0.85,0.85,0.95,0.95,1.15,1.15,1.55,0.85,0.25,8.55,6,"ClanERMediumLaser, ClanUltraAC5, ClanGaussRifle, ClanSSRM2, 2x ClanLRM10",ClanERMediumLaser@LeftTorso(Front) G1 | ClanUltraAC5@LeftArm(Front) G1 | ClanGaussRifle@RightArm(Front) G1 | ClanSSRM2@RightTorso(Front) G2 | ClanLRM10@Special1(Side) G2 | ClanLRM10@Special2(Side) G2,LeftTorsox1 | LeftArmx1 | RightArmx1 | RightTorsox1 | Special1x1 | Special2x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O8) | RightTorso(M0/P0/B0/O8) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O4) | Special2(M0/P0/B0/O4),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown) | Special1(Side) | Special2(Side),
|
|
||||||
Chimera,Yes,IS,9.500000,40.000000,Standard,EndoSteel,14,Single,1,Yes,Yes,Yes,Yes,43,BAP,0.95,0.95,1.0,1.0,1.0,1.0,1.1,0.5,0.3,7.8,7,"2x MediumPulseLaser, ERLargeLaser, 4x LRM5",MediumPulseLaser@LeftArm(Front) G1 | MediumPulseLaser@LeftArm(Front) G1 | ERLargeLaser@RightArm(Front) G1 | LRM5@RightTorso(Side) G2 | LRM5@RightTorso(Side) G2 | LRM5@RightTorso(Side) G2 | LRM5@RightTorso(Side) G2,LeftArmx2 | RightArmx1 | RightTorsox4,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Unknown) | RightTorso(Side) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Commando,Yes,IS,7.000000,25.000000,Standard,Standard,8,Single,0,Yes,Yes,Yes,Yes,43,,0.6,0.6,0.8,0.8,0.75,0.75,0.8,0.45,0.3,5.85,3,"2x MediumLaser, SRM6",MediumLaser@LeftArm(Front) G1 | MediumLaser@RightArm(Front) G1 | SRM6@CenterTorso(Front) G2,LeftArmx1 | RightArmx1 | CenterTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Unknown) | RightTorso(Unknown) | CenterTorso(Front) | Head(Unknown),
|
|
||||||
Cougar,Yes,Clan,8.500000,35.000000,FerroFiberus,EndoSteel,10,Single,1,Yes,Yes,Yes,Yes,43,BAP,0.7,0.7,0.7,0.7,0.75,0.75,0.8,0.45,0.25,5.8,5,"2x ClanMediumPulseLaser, ClanMachineGun, 2x ClanLRM10",ClanMediumPulseLaser@LeftArm(Front) G1 | ClanMediumPulseLaser@RightArm(Front) G1 | ClanMachineGun@RightTorso(Front) G1 | ClanLRM10@LeftTorso(Side) G2 | ClanLRM10@RightTorso(Side) G2,LeftArmx1 | RightArmx1 | RightTorsox2 | LeftTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Side) | RightTorso(Front+Side) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Crab,No,IS,10.500000,50.000000,FerroFiberus,Standard,0,,0,No,No,Yes,No,1,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P0/B4/O0) | RightArm(M0/P0/B4/O0) | CenterTorso(M0/P0/B2/O0) | Special1(M0/P0/B1/O1),LeftArm(Unknown) | RightArm(Unknown) | CenterTorso(Unknown) | Special1(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
Cyclops,Yes,IS,19.000000,90.000000,FerroFiberus,Standard,16,Single,0,No,Yes,Yes,Yes,45,BAP,1.4,1.4,1.4,1.4,1.55,1.55,1.45,0.8,0.25,11.2,8,"3x MediumPulseLaser, 2x MediumLaser, GaussRifle, SRM4, LRM10",MediumPulseLaser@LeftArm(Front) G1 | MediumPulseLaser@Special1(Front) G1 | MediumPulseLaser@RightArm(Front) G1 | MediumLaser@LeftArm(Front) G1 | MediumLaser@RightArm(Front) G1 | GaussRifle@RightTorso(Front) G1 | SRM4@CenterTorso(Front) G2 | LRM10@LeftTorso(Side) G2,LeftArmx2 | Special1x1 | RightArmx2 | RightTorsox1 | CenterTorsox1 | LeftTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Side) | RightTorso(Front) | CenterTorso(Front) | Head(Unknown) | Special1(Front),
|
|
||||||
Daishi,Yes,Clan,25.000000,100.000000,Standard,Standard,21,Single,0,No,Yes,Yes,Yes,43,,1.75,1.75,1.9,1.9,2.0,2.0,2.2,1.5,0.3,15.3,6,"3x ClanLargePulseLaser, ClanGaussRifle, 2x ClanSSRM6",ClanLargePulseLaser@RightArm(Front) G1 | ClanLargePulseLaser@RightArm(Front) G1 | ClanLargePulseLaser@RightArm(Front) G1 | ClanGaussRifle@LeftArm(Front) G1 | ClanSSRM6@special1(Front) G2 | ClanSSRM6@special1(Front) G2,RightArmx3 | LeftArmx1 | special1x2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O8) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O4),LeftArm(Front) | RightArm(Front) | LeftTorso(Unknown) | RightTorso(Unknown) | CenterTorso(Unknown) | Head(Unknown) | Special1(Unknown),
|
|
||||||
Deimos,Yes,Clan,18.000000,85.000000,Reactive,EndoSteel,17,Single,0,No,Yes,Yes,Yes,43,,1.55,1.55,1.65,1.65,1.75,1.75,2.05,0.7,0.3,12.95,10,"2x ClanERMediumLaser, 6x ClanUltraAC2, 2x ClanLRM15",ClanERMediumLaser@LeftTorso(Front) G1 | ClanERMediumLaser@RightTorso(Front) G1 | ClanUltraAC2@LeftArm(Front) G1 | ClanUltraAC2@LeftArm(Front) G1 | ClanUltraAC2@LeftArm(Front) G1 | ClanUltraAC2@RightArm(Front) G1 | ClanUltraAC2@RightArm(Front) G1 | ClanUltraAC2@RightArm(Front) G1 | ClanLRM15@Special1(Side) G2 | ClanLRM15@Special2(Side) G2,LeftTorsox1 | RightTorsox1 | LeftArmx3 | RightArmx3 | Special1x1 | Special2x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O9) | RightTorso(M0/P0/B0/O9) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O3) | Special2(M0/P0/B0/O3),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown) | Special1(Side) | Special2(Side),
|
|
||||||
Dragon,Yes,Clan,17.000000,60.000000,Standard,Standard,13,Single,0,Yes,Yes,Yes,Yes,43,,1.15,1.15,1.4,1.4,1.25,1.25,1.55,0.9,0.3,10.35,5,"3x MediumLaser, ERPPC, LRM10",MediumLaser@LeftArm(Front) G1 | MediumLaser@LeftTorso(Front) G1 | MediumLaser@RightTorso(Front) G1 | ERPPC@RightArm(Front) G1 | LRM10@CenterTorso(Side) G2,LeftArmx1 | LeftTorsox1 | RightTorsox1 | RightArmx1 | CenterTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Side) | Head(Unknown),
|
|
||||||
Duangung,No,IS,7.000000,25.000000,FerroFiberus,Standard,0,,0,Yes,No,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P0/B2/O0) | RightArm(M0/P0/B2/O0) | CenterTorso(M2/P0/B0/O0) | Special1(M0/P0/B1/O0) | Special2(M0/P0/B1/O0),LeftArm(Unknown) | RightArm(Unknown) | CenterTorso(Unknown) | Special1(Unknown) | Special2(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
Fafnir,Yes,IS,21.000000,100.000000,FerroFiberus,Standard,7,Single,0,No,Yes,No,No,43,,1.8,1.8,1.9,1.9,2.0,2.0,2.2,1.0,0.3,14.9,7,"2x ClanGaussRifle, 2x LargeLaser, 3x MediumLaser",ClanGaussRifle@RightTorso(Front) G1 | ClanGaussRifle@LeftTorso(Front) G1 | LargeLaser@RightArm(Front) G1 | LargeLaser@LeftArm(Front) G1 | MediumLaser@RightTorso(Front) G1 | MediumLaser@CenterTorso(Front) G1 | MediumLaser@LeftTorso(Front) G1,RightTorsox2 | LeftTorsox2 | RightArmx1 | LeftArmx1 | CenterTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Front) | Head(Unknown),
|
|
||||||
Flea,Yes,IS,7.000000,20.000000,Standard,Standard,2,Single,0,No,Yes,Yes,Yes,43,,0.4,0.4,0.4,0.4,0.5,0.5,0.65,0.3,0.3,3.85,6,"2x SmallLaser, 2x MediumLaser, 2x MachineGun",SmallLaser@LeftTorso(Rear) G1 | SmallLaser@RightTorso(Rear) G1 | MediumLaser@LeftArm(Front) G1 | MediumLaser@RightArm(Front) G1 | MachineGun@LeftArm(Front) G1 | MachineGun@RightArm(Front) G1,LeftTorsox1 | RightTorsox1 | LeftArmx2 | RightArmx2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Rear) | RightTorso(Rear) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Gargoyle,No,Clan,15.000000,80.000000,FerroFiberus,EndoSteel,0,,0,No,Yes,No,No,6,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M1/P0/B0/O3) | RightArm(M1/P0/B0/O3) | LeftTorso(M0/P2/B2/O0) | RightTorso(M0/P2/B2/O0),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
Gesu,No,Clan,9.750000,45.000000,FerroFiberus,EndoSteel,0,,0,No,No,Yes,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P2/B0/O0) | RightArm(M0/P2/B0/O0) | LeftTorso(M0/P0/B2/O0) | RightTorso(M0/P0/B2/O0) | Special1(M2/P0/B0/O0) | Special2(M2/P0/B0/O0),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown) | Special1(Unknown) | Special2(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
Gladiator,Yes,Clan,24.000000,95.000000,FerroFiberus,Standard,19,Single,1,Yes,Yes,Yes,Yes,43,,1.4,1.4,1.65,1.65,1.75,1.75,2.0,0.95,0.25,12.8,12,"5x ClanSmallPulseLaser, ClanERSmallLaser, 3x ClanMediumPulseLaser, ClanLargePulseLaser, 2x SRM6",ClanSmallPulseLaser@RightTorso(Front) G1 | ClanSmallPulseLaser@RightTorso(Front) G1 | ClanSmallPulseLaser@RightArm(Front) G1 | ClanSmallPulseLaser@RightArm(Front) G1 | ClanSmallPulseLaser@RightArm(Front) G1 | ClanERSmallLaser@LeftTorso(Front) G1 | ClanMediumPulseLaser@RightArm(Front) G1 | ClanMediumPulseLaser@RightArm(Front) G1 | ClanMediumPulseLaser@RightArm(Front) G1 | ClanLargePulseLaser@LeftArm(Front) G1 | SRM6@LeftArm(Front) G2 | SRM6@LeftArm(Front) G2,RightTorsox2 | RightArmx6 | LeftTorsox1 | LeftArmx3,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Grizzly,Yes,Clan,16.000000,70.000000,FerroFiberus,Standard,11,Single,1,Yes,Yes,Yes,Yes,40,,1.2,1.2,1.1,1.1,1.4,1.4,1.5,0.5,0.25,9.65,6,"2x ClanSmallPulseLaser, ClanMediumPulseLaser, ClanLargePulseLaser, ClanGaussRifle, CLANLRM10",ClanSmallPulseLaser@LeftArm(Front) G1 | ClanSmallPulseLaser@LeftArm(Front) G1 | ClanMediumPulseLaser@RightTorso(Front) G1 | ClanLargePulseLaser@LeftArm(Front) G1 | ClanGaussRifle@RightArm(Front) G1 | CLANLRM10@LeftTorso(Side) G2,LeftArmx3 | RightTorsox1 | RightArmx1 | LeftTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12),LeftArm(Front) | RightArm(Front) | LeftTorso(Side) | RightTorso(Front),
|
|
||||||
Hauptmann,Yes,Clan,21.000000,95.000000,Standard,Standard,20,Single,0,Yes,Yes,Yes,Yes,43,ECM,1.7,1.7,1.8,1.8,1.9,1.9,2.1,1.1,0.3,14.3,8,"ClanERSmallLaser, 2x ClanMediumPulseLaser, 2x ClanLargePulseLaser, ClanUltraAC20, 2x ClanSSRM2",ClanERSmallLaser@Head(Front) G1 | ClanMediumPulseLaser@LeftArm(Front) G1 | ClanMediumPulseLaser@RightArm(Front) G1 | ClanLargePulseLaser@LeftArm(Front) G1 | ClanLargePulseLaser@RightArm(Front) G1 | ClanUltraAC20@Special1(Front) G1 | ClanSSRM2@LeftTorso(Front) G2 | ClanSSRM2@RightTorso(Front) G2,Headx1 | LeftArmx2 | RightArmx2 | Special1x1 | LeftTorsox1 | RightTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O8) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O4),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Front) | Special1(Front),
|
|
||||||
Hellhound,Yes,Clan,10.500000,50.000000,FerroFiberus,EndoSteel,12,Single,1,Yes,Yes,Yes,Yes,43,,0.9,0.9,0.95,0.95,1.05,1.05,1.2,0.55,0.25,7.8,6,"3x ClanMediumPulseLaser, ClanUltraAC2, ClanUltraAC5, ClanLRM10",ClanMediumPulseLaser@LeftArm(Front) G1 | ClanMediumPulseLaser@LeftArm(Front) G1 | ClanMediumPulseLaser@RightArm(Front) G1 | ClanUltraAC2@RightTorso(Front) G1 | ClanUltraAC5@RightTorso(Front) G1 | ClanLRM10@LeftTorso(Side) G2,LeftArmx2 | RightArmx1 | RightTorsox2 | LeftTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Side) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Hellspawn,Yes,IS,10.000000,45.000000,Standard,Standard,9,Single,1,Yes,Yes,Yes,Yes,43,ECM,0.5,0.5,0.8,0.8,0.85,0.85,1.15,0.5,0.3,6.25,6,"2x MediumPulseLaser, LargePulseLaser, 2x SSRM2, LRM10",MediumPulseLaser@LeftArm(Front) G1 | MediumPulseLaser@LeftArm(Front) G1 | LargePulseLaser@LeftArm(Front) G1 | SSRM2@RightArm(Front) G2 | SSRM2@Special1(Front) G2 | LRM10@LeftTorso(Front) G2,LeftArmx3 | RightArmx1 | Special1x1 | LeftTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O8) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O4),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Unknown) | CenterTorso(Unknown) | Head(Unknown) | Special1(Front),
|
|
||||||
Highlander,Yes,IS,21.500000,90.000000,Standard,Standard,17,Single,1,Yes,Yes,Yes,Yes,43,,1.75,1.45,1.7,1.7,1.8,1.8,2.0,0.85,0.3,13.35,7,"4x MediumPulseLaser, GaussRifle, 2x SRM6",MediumPulseLaser@RightTorso(Front) G1 | MediumPulseLaser@RightTorso(Front) G1 | MediumPulseLaser@RightArm(Front) G1 | MediumPulseLaser@RightArm(Front) G1 | GaussRifle@LeftArm(Front) G1 | SRM6@LeftTorso(Front) G2 | SRM6@LeftTorso(Front) G2,RightTorsox2 | RightArmx2 | LeftArmx1 | LeftTorsox2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Hollander,Yes,IS,10.000000,45.000000,FerroFiberus,EndoSteel,12,Single,0,No,Yes,Yes,Yes,42,,0.85,0.85,0.85,0.85,0.9,0.9,1.05,0.45,0.25,6.95,6,"2x SmallPulseLaser, 3x MediumPulseLaser, GaussRifle",SmallPulseLaser@Special2(Front) G1 | SmallPulseLaser@Special2(Front) G1 | MediumPulseLaser@LeftArm(Front) G1 | MediumPulseLaser@LeftTorso(Front) G1 | MediumPulseLaser@RightArm(Front) G1 | GaussRifle@Special1(Front) G1,Special2x2 | LeftArmx1 | LeftTorsox1 | RightArmx1 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | Special1(M0/P0/B0/O12) | Special2(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | Special1(Front) | Special2(Front),
|
|
||||||
Hunchback,Yes,IS,13.500000,50.000000,Standard,Standard,10,Single,0,Yes,Yes,Yes,Yes,43,ECM,1.0,1.0,1.1,1.1,1.2,1.2,1.5,0.5,0.3,8.9,6,"SmallLaser, 4x MediumLaser, AC10",SmallLaser@Head(Front) G1 | MediumLaser@LeftArm(Front) G1 | MediumLaser@LeftArm(Front) G1 | MediumLaser@RightArm(Front) G1 | MediumLaser@RightArm(Front) G1 | AC10@Special1(Front) G1,Headx1 | LeftArmx2 | RightArmx2 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O8) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O4),LeftArm(Front) | RightArm(Front) | LeftTorso(Unknown) | RightTorso(Unknown) | CenterTorso(Unknown) | Head(Front) | Special1(Front),
|
|
||||||
Kodiak,Yes,IS,22.000000,100.000000,Standard,EndoSteel,20,Single,1,Yes,Yes,Yes,Yes,43,,1.5,1.5,1.9,1.9,1.5,1.5,2,1.1,0.3,13.2,7,"4x ClanERMediumLaser, ClanUltraAC20, 2x ClanSSRM6",ClanERMediumLaser@leftArm(Front) G1 | ClanERMediumLaser@leftArm(Front) G1 | ClanERMediumLaser@rightarm(Front) G1 | ClanERMediumLaser@rightarm(Front) G1 | ClanUltraAC20@RightTorso(Front) G1 | ClanSSRM6@LeftTorso(Front) G2 | ClanSSRM6@LeftTorso(Front) G2,leftArmx2 | rightarmx2 | RightTorsox1 | LeftTorsox2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Loki,Yes,Clan,17.500000,65.000000,Standard,Standard,13,Single,0,No,Yes,Yes,Yes,43,ECM,1.3,1.3,1.4,1.4,1.5,1.5,1.55,0.6,0.3,10.85,7,"2x ClanERMediumLaser, 2x ClanMachineGun, 2x ClanUltraAC5, ClanSSRM6",ClanERMediumLaser@LeftArm(Front) G1 | ClanERMediumLaser@RightArm(Front) G1 | ClanMachineGun@LeftTorso(Front) G1 | ClanMachineGun@RightTorso(Front) G1 | ClanUltraAC5@LeftArm(Front) G1 | ClanUltraAC5@RightArm(Front) G1 | ClanSSRM6@Special1(Front) G2,LeftArmx2 | RightArmx2 | LeftTorsox1 | RightTorsox1 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O10) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown) | Special1(Front),
|
|
||||||
Longbow,Yes,IS,20.500000,85.000000,Standard,Standard,11,Single,0,No,Yes,Yes,Yes,43,,1.6,1.6,1.65,1.65,1.2,1.2,1.85,1.0,0.3,12.05,6,"2x MediumLaser, 2x LRM5, 2x LRM20",MediumLaser@LeftTorso(Front) G1 | MediumLaser@RightTorso(Front) G1 | LRM5@LeftTorso(Front) G2 | LRM5@RightTorso(Front) G2 | LRM20@LeftArm(Front) G2 | LRM20@RightArm(Front) G2,LeftTorsox2 | RightTorsox2 | LeftArmx1 | RightArmx1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
MadCat_MkII,Yes,Clan,18.500000,90.000000,Reflective,EndoSteel,17,Single,1,Yes,Yes,Yes,Yes,43,,1.8,1.8,1.8,1.8,1.85,1.85,2.0,0.8,0.3,14,12,"4x ClanERSmallLaser, 2x ClanMachineGun, 4x ClanUltraAC5, 2x ClanLRM15",ClanERSmallLaser@LeftTorso(Front) G1 | ClanERSmallLaser@CenterTorso(Front) G1 | ClanERSmallLaser@CenterTorso(Front) G1 | ClanERSmallLaser@RightTorso(Front) G1 | ClanMachineGun@LeftTorso(Front) G1 | ClanMachineGun@RightTorso(Front) G1 | ClanUltraAC5@LeftArm(Front) G1 | ClanUltraAC5@LeftArm(Front) G1 | ClanUltraAC5@RightArm(Front) G1 | ClanUltraAC5@RightArm(Front) G1 | ClanLRM15@Special2(Side) G2 | ClanLRM15@Special1(Side) G2,LeftTorsox2 | CenterTorsox2 | RightTorsox2 | LeftArmx2 | RightArmx2 | Special2x1 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O8) | RightTorso(M0/P0/B0/O8) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O4) | Special2(M0/P0/B0/O4),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Front) | Head(Unknown) | Special1(Side) | Special2(Side),
|
|
||||||
Madcat,Yes,Clan,16.500000,75.000000,FerroFiberus,EndoSteel,17,Single,0,Yes,Yes,Yes,Yes,43,,1.1,1.1,1.2,1.2,1.4,1.4,1.5,0.5,0.25,9.65,8,"2x ClanMediumPulseLaser, 2x ClanERLargeLaser, 2x ClanMachineGun, 2x ClanLRM10",ClanMediumPulseLaser@LeftArm(Front) G1 | ClanMediumPulseLaser@RightArm(Front) G1 | ClanERLargeLaser@LeftArm(Front) G1 | ClanERLargeLaser@RightArm(Front) G1 | ClanMachineGun@LeftTorso(Front) G1 | ClanMachineGun@RightTorso(Front) G1 | ClanLRM10@Special1(Side) G2 | ClanLRM10@Special2(Side) G2,LeftArmx2 | RightArmx2 | LeftTorsox1 | RightTorsox1 | Special1x1 | Special2x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O9) | RightTorso(M0/P0/B0/O9) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O3) | Special2(M0/P0/B0/O3),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown) | Special1(Side) | Special2(Side),
|
|
||||||
Masakari,Yes,Clan,18.000000,85.000000,FerroFiberus,Standard,15,Single,0,Yes,Yes,Yes,Yes,43,,1.25,1.25,1.4,1.4,1.45,1.45,1.8,0.85,0.25,11.1,7,"2x ClanERMediumLaser, 2x ClanUltraAC2, ClanGaussRifle, 2x ClanLRM10",ClanERMediumLaser@RightTorso(Front) G1 | ClanERMediumLaser@RightTorso(Front) G1 | ClanUltraAC2@RightArm(Front) G1 | ClanUltraAC2@RightArm(Front) G1 | ClanGaussRifle@LeftArm(Front) G1 | ClanLRM10@LeftTorso(Side) G2 | ClanLRM10@LeftTorso(Side) G2,RightTorsox2 | RightArmx2 | LeftArmx1 | LeftTorsox2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Side) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Mauler,Yes,IS,26.000000,90.000000,FerroFiberus,Standard,11,Single,0,No,Yes,Yes,Yes,43,,1.4,1.4,1.4,1.4,1.55,1.55,1.45,0.8,0.25,11.2,10,"2x GaussRifle, 2x SSRM4, 6x LRM5",GaussRifle@LeftArm(Front) G1 | GaussRifle@RightArm(Front) G1 | SSRM4@LeftTorso(Front) G2 | SSRM4@RightTorso(Front) G2 | LRM5@LeftTorso(Side) G2 | LRM5@LeftTorso(Side) G2 | LRM5@LeftTorso(Side) G2 | LRM5@RightTorso(Side) G2 | LRM5@RightTorso(Side) G2 | LRM5@RightTorso(Side) G2,LeftArmx1 | RightArmx1 | LeftTorsox4 | RightTorsox4,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front+Side) | RightTorso(Front+Side) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Novacat,Yes,Clan,16.000000,70.000000,Reactive,EndoSteel,17,Single,1,Yes,Yes,Yes,Yes,43,ECM,1.55,1.55,1.45,1.45,1.5,1.5,1.7,0.75,0.3,11.75,7,"5x ClanMediumPulseLaser, 2x ClanERLargeLaser",ClanMediumPulseLaser@LeftArm(Front) G1 | ClanMediumPulseLaser@LeftArm(Front) G1 | ClanMediumPulseLaser@LeftArm(Front) G1 | ClanMediumPulseLaser@LeftTorso(Front) G1 | ClanMediumPulseLaser@RightTorso(Front) G1 | ClanERLargeLaser@RightArm(Front) G1 | ClanERLargeLaser@RightArm(Front) G1,LeftArmx3 | LeftTorsox1 | RightTorsox1 | RightArmx2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Osiris,Yes,IS,9.500000,30.000000,FerroFiberus,EndoSteel,11,Single,1,Yes,Yes,Yes,Yes,43,,0.6,0.6,0.6,0.6,0.65,0.65,0.75,0.3,0.25,5,5,"SmallPulseLaser, 2x MediumPulseLaser, SSRM2, NarcBeacon",SmallPulseLaser@special2(Front) G1 | MediumPulseLaser@special1(Front) G1 | MediumPulseLaser@RightArm(Front) G1 | SSRM2@LeftArm(Front) G2 | NarcBeacon@LeftArm(Front) G3,special2x1 | special1x1 | RightArmx1 | LeftArmx2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O1) | Special2(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Unknown) | RightTorso(Unknown) | Head(Unknown) | Special1(Unknown) | Special2(Unknown),
|
|
||||||
Owens,Yes,IS,9.750000,35.000000,Standard,Standard,5,Single,0,No,Yes,Yes,Yes,39,ECM,0.9,0.9,0.8,0.8,0.8,0.8,1.05,0.35,0.3,6.7,5,"2x SmallLaser, MediumLaser, 2x SRM6",SmallLaser@CenterTorso(Front) G1 | SmallLaser@CenterTorso(Front) G1 | MediumLaser@Head(Front) G1 | SRM6@LeftArm(Front) G2 | SRM6@RightArm(Front) G2,CenterTorsox2 | Headx1 | LeftArmx1 | RightArmx1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O8) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Unknown) | RightTorso(Unknown) | CenterTorso(Front) | Head(Front),
|
|
||||||
Puma,Yes,Clan,7.500000,35.000000,FerroFiberus,EndoSteel,10,Single,1,Yes,Yes,Yes,Yes,43,,0.8,0.8,0.6,0.6,0.6,0.6,0.85,0.45,0.25,5.55,4,"2x ClanSmallPulseLaser, 2x ClanLRM20",ClanSmallPulseLaser@LeftTorso(Front) G1 | ClanSmallPulseLaser@RightTorso(Front) G1 | ClanLRM20@LeftArm(Front) G2 | ClanLRM20@RightArm(Front) G2,LeftTorsox1 | RightTorsox1 | LeftArmx1 | RightArmx1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Raven,Yes,IS,10.250000,35.000000,FerroFiberus,Standard,7,Single,0,No,Yes,Yes,Yes,43,"BAP, ECM",0.6,0.65,0.65,0.65,0.7,0.7,0.75,0.25,0.25,5.2,5,"2x MediumLaser, SRM6, LRM5, NarcBeacon",MediumLaser@RightArm(Front) G1 | MediumLaser@RightArm(Front) G1 | SRM6@RightTorso(Front) G2 | LRM5@RightTorso(Side) G2 | NarcBeacon@LeftArm(Front) G3,RightArmx2 | RightTorsox2 | LeftArmx1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Unknown) | RightTorso(Front+Side) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Rifleman,Yes,IS,12.500000,60.000000,FerroFiberus,EndoSteel,17,Single,0,Yes,Yes,Yes,Yes,43,,0.9,0.9,1.0,1.0,1.5,1.5,1.3,0.7,0.25,9.05,6,"2x MediumLaser, 2x LargeLaser, 2x PPC",MediumLaser@Special1(Front) G1 | MediumLaser@Special1(Front) G1 | LargeLaser@LeftArm(Front) G1 | LargeLaser@RightArm(Front) G1 | PPC@LeftArm(Front) G1 | PPC@RightArm(Front) G1,Special1x2 | LeftArmx2 | RightArmx2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Unknown) | RightTorso(Unknown) | Head(Unknown) | Special1(Front),
|
|
||||||
Ryoken,Yes,IS,12.500000,55.000000,FerroFiberus,EndoSteel,10,Single,1,Yes,Yes,Yes,Yes,43,ECM,0.9,0.9,1.0,1.0,1.05,1.05,1.15,0.75,0.25,8.05,6,"4x ClanMediumPulseLaser, 2x ClanSSRM6",ClanMediumPulseLaser@LeftArm(Front) G1 | ClanMediumPulseLaser@LeftArm(Front) G1 | ClanMediumPulseLaser@RightArm(Front) G1 | ClanMediumPulseLaser@RightArm(Front) G1 | ClanSSRM6@LeftTorso(Front) G2 | ClanSSRM6@RightTorso(Front) G2,LeftArmx2 | RightArmx2 | LeftTorsox1 | RightTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Shadowcat,Yes,Clan,9.750000,45.000000,FerroFiberus,EndoSteel,10,Single,1,Yes,Yes,Yes,Yes,43,BAP,0.85,0.85,0.85,0.85,0.9,0.9,1.05,0.45,0.25,6.95,5,"2x ClanMediumPulseLaser, ClanGaussRifle, 2x ClanSSRM4",ClanMediumPulseLaser@RightTorso(Front) G1 | ClanMediumPulseLaser@RightArm(Front) G1 | ClanGaussRifle@LeftArm(Front) G1 | ClanSSRM4@LeftTorso(Front) G2 | ClanSSRM4@RightTorso(Front) G2,RightTorsox2 | RightArmx1 | LeftArmx1 | LeftTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Solitaire,Yes,Clan,7.000000,25.000000,FerroFiberus,EndoSteel,10,Single,0,Yes,Yes,Yes,Yes,46,,0.6,0.6,0.6,0.6,0.55,0.55,0.8,0.4,0.25,4.95,4,"ClanERSmallLaser, 2x ClanERMediumLaser, ClanERLargeLaser",ClanERSmallLaser@LeftTorso(Front) G1 | ClanERMediumLaser@LeftTorso(Front) G1 | ClanERMediumLaser@CenterTorso(Front) G1 | ClanERLargeLaser@Special1(Front) G1,LeftTorsox2 | CenterTorsox1 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O3),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Front) | RightTorso(Unknown) | CenterTorso(Front) | Head(Unknown) | Special1(Front),
|
|
||||||
Sunder,Yes,IS,17.500000,90.000000,Standard,Standard,17,Single,0,Yes,Yes,Yes,Yes,43,,1.35,1.35,1.55,1.55,1.65,1.65,2.0,1.0,0.3,12.4,10,"6x MediumLaser, PPC, 2x MachineGun, SRM6",MediumLaser@LeftTorso(Front) G1 | MediumLaser@LeftTorso(Front) G1 | MediumLaser@LeftTorso(Rear) G1 | MediumLaser@RightTorso(Rear) G1 | MediumLaser@RightTorso(Front) G1 | MediumLaser@RightTorso(Front) G1 | PPC@LeftArm(Front) G1 | MachineGun@RightArm(Front) G1 | MachineGun@RightArm(Front) G1 | SRM6@CenterTorso(Front) G2,LeftTorsox3 | RightTorsox3 | LeftArmx1 | RightArmx2 | CenterTorsox1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front+Rear) | RightTorso(Front+Rear) | CenterTorso(Front) | Head(Unknown),
|
|
||||||
Templar,Yes,IS,20.500000,85.000000,Standard,EndoSteel,25,Single,1,Yes,Yes,Yes,Yes,43,,1.45,1.45,1.6,1.6,1.8,1.8,2.05,0.95,0.3,13,11,"6x MediumPulseLaser, PPC, 2x MachineGun, AC20, SRM4",MediumPulseLaser@LeftArm(Front) G1 | MediumPulseLaser@LeftTorso(Front) G1 | MediumPulseLaser@RightTorso(Front) G1 | MediumPulseLaser@RightArm(Front) G1 | MediumPulseLaser@LeftTorso(Rear) G1 | MediumPulseLaser@RightTorso(Rear) G1 | PPC@LeftArm(Front) G1 | MachineGun@LeftTorso(Front) G1 | MachineGun@RightTorso(Front) G1 | AC20@RightArm(Front) G1 | SRM4@RightTorso(Front) G2,LeftArmx2 | LeftTorsox3 | RightTorsox4 | RightArmx2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front+Rear) | RightTorso(Front+Rear) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Thanatos,Yes,IS,18.000000,75.000000,FerroFiberus,EndoSteel,20,Single,1,Yes,Yes,Yes,Yes,43,,0.9,0.9,1.3,1.3,1.2,1.2,1.6,0.85,0.25,9.5,7,"MediumPulseLaser, 2x MediumLaser, 2x LargePulseLaser, 2x LRM10",MediumPulseLaser@LeftTorso(Front) G1 | MediumLaser@LeftArm(Front) G1 | MediumLaser@RightTorso(Front) G1 | LargePulseLaser@LeftArm(Front) G1 | LargePulseLaser@RightTorso(Front) G1 | LRM10@RightArm(Front) G2 | LRM10@RightArm(Front) G2,LeftTorsox1 | LeftArmx2 | RightTorsox2 | RightArmx2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Thor,Yes,Clan,19.000000,70.000000,FerroFiberus,Standard,20,Single,1,Yes,Yes,Yes,Yes,43,,1.1,1.1,1.2,1.2,1.4,1.4,1.5,0.5,0.25,9.65,7,"2x ClanMediumPulseLaser, ClanERPPC, 2x ClanMachineGun, ClanUltraAC10, CLANLRM10",ClanMediumPulseLaser@LeftTorso(Front) G1 | ClanMediumPulseLaser@RightTorso(Front) G1 | ClanERPPC@RightArm(Front) G1 | ClanMachineGun@LeftTorso(Front) G1 | ClanMachineGun@RightTorso(Front) G1 | ClanUltraAC10@LeftArm(Front) G1 | CLANLRM10@Special1(Side) G2,LeftTorsox2 | RightTorsox2 | RightArmx1 | LeftArmx1 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O10) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown) | Special1(Side),
|
|
||||||
Uller,Yes,Clan,8.000000,30.000000,FerroFiberus,EndoSteel,8,Single,0,Yes,Yes,Yes,Yes,43,ECM,0.45,0.45,0.5,0.5,0.6,0.6,0.65,0.45,0.25,4.45,4,"ClanERSmallLaser, ClanERMediumLaser, ClanUltraAC5, ClanSRM6",ClanERSmallLaser@LeftArm(Front) G1 | ClanERMediumLaser@RightArm(Front) G1 | ClanUltraAC5@RightArm(Front) G1 | ClanSRM6@LeftArm(Front) G2,LeftArmx2 | RightArmx2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Unknown) | RightTorso(Unknown) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Uziel,Yes,IS,11.500000,50.000000,Standard,EndoSteel,10,Single,1,Yes,Yes,Yes,Yes,45,,1.2,1.2,1.05,1.05,1.15,1.15,1.0,0.45,0.3,8.55,7,"2x SmallPulseLaser, PPC, 2x MachineGun, UltraAC5, LRM10",SmallPulseLaser@LeftTorso(Front) G1 | SmallPulseLaser@RightTorso(Front) G1 | PPC@LeftArm(Front) G1 | MachineGun@LeftTorso(Front) G1 | MachineGun@RightTorso(Front) G1 | UltraAC5@RightArm(Front) G1 | LRM10@Special1(Side) G2,LeftTorsox2 | RightTorsox2 | LeftArmx1 | RightArmx1 | Special1x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O4),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | Head(Unknown) | Special1(Side),
|
|
||||||
Victor,Yes,IS,17.000000,80.000000,Standard,EndoSteel,10,Single,1,Yes,Yes,Yes,Yes,43,ECM,1.3,1.3,1.3,1.3,1.25,1.25,1.65,1.1,0.3,10.75,7,"2x MediumLaser, 2x MachineGun, AC20, 2x SRM4",MediumLaser@LeftArm(Front) G1 | MediumLaser@LeftArm(Front) G1 | MachineGun@LeftTorso(Front) G1 | MachineGun@RightTorso(Front) G1 | AC20@RightArm(Front) G1 | SRM4@LeftTorso(Front) G2 | SRM4@RightTorso(Front) G2,LeftArmx2 | LeftTorsox2 | RightTorsox2 | RightArmx1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Unknown) | Head(Unknown),
|
|
||||||
Vulture,Yes,Clan,16.000000,60.000000,Reactive,EndoSteel,12,Single,0,No,Yes,Yes,Yes,43,BAP,1.3,1.3,1.5,1.5,1.6,1.6,1.75,0.5,0.3,11.35,10,"4x ClanMachineGun, 2x ClanLargePulseLaser, 2x ClanLRM5, 2x ClanLRM10",ClanMachineGun@LeftArm(Front) G1 | ClanMachineGun@Special1(Front) G1 | ClanMachineGun@Special1(Front) G1 | ClanMachineGun@RightArm(Front) G1 | ClanLargePulseLaser@LeftArm(Front) G1 | ClanLargePulseLaser@RightArm(Front) G1 | ClanLRM5@LeftTorso(Side) G2 | ClanLRM5@RightTorso(Side) G2 | ClanLRM10@LeftTorso(Side) G2 | ClanLRM10@RightTorso(Side) G2,LeftArmx2 | Special1x2 | RightArmx2 | LeftTorsox2 | RightTorsox2,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | Head(M0/P0/B0/O1) | Special1(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Side) | RightTorso(Side) | Head(Unknown) | Special1(Front),
|
|
||||||
Warhammer,Yes,IS,15.000000,70.000000,Standard,Standard,17,Single,0,Yes,Yes,Yes,Yes,43,,1.55,1.55,1.45,1.45,1.5,1.5,1.7,0.75,0.3,11.75,5,"2x MediumLaser, 2x ERPPC, SRM6",MediumLaser@RightTorso(Front) G1 | MediumLaser@LeftTorso(Front) G1 | ERPPC@RightArm(Front) G1 | ERPPC@LeftArm(Front) G1 | SRM6@special2(Front) G2,RightTorsox1 | LeftTorsox1 | RightArmx1 | LeftArmx1 | special2x1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | Special2(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | Special2(Unknown),
|
|
||||||
Wolfhound,Yes,Clan,10.250000,35.000000,FerroFiberus,EndoSteel,14,Single,0,Yes,Yes,Yes,Yes,43,ECM,0.5,0.5,0.7,0.7,0.75,0.75,0.95,0.5,0.25,5.6,5,"3x ClanMediumPulseLaser, ClanERMediumLaser, ClanERLargeLaser",ClanMediumPulseLaser@LeftTorso(Front) G1 | ClanMediumPulseLaser@CenterTorso(Front) G1 | ClanMediumPulseLaser@RightTorso(Front) G1 | ClanERMediumLaser@CenterTorso(Rear) G1 | ClanERLargeLaser@RightArm(Front) G1,LeftTorsox1 | CenterTorsox2 | RightTorsox1 | RightArmx1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Unknown) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front) | CenterTorso(Front+Rear) | Head(Unknown),
|
|
||||||
Zeus,Yes,IS,22.000000,80.000000,FerroFiberus,Standard,22,Single,0,Yes,Yes,Yes,Yes,43,,1.1,1.1,1.25,1.25,1.45,1.45,1.55,0.8,0.25,10.2,7,"4x MediumPulseLaser, ERLargeLaser, ERPPC, LRM15",MediumPulseLaser@LeftTorso(Front) G1 | MediumPulseLaser@RightTorso(Front) G1 | MediumPulseLaser@RightArm(Front) G1 | MediumPulseLaser@RightTorso(Rear) G1 | ERLargeLaser@CenterTorso(Front) G1 | ERPPC@LeftArm(Front) G1 | LRM15@RightArm(Front) G2,LeftTorsox1 | RightTorsox2 | RightArmx2 | CenterTorsox1 | LeftArmx1,LeftArm(M0/P0/B0/O8) | RightArm(M0/P0/B0/O8) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2) | Head(M0/P0/B0/O1),LeftArm(Front) | RightArm(Front) | LeftTorso(Front) | RightTorso(Front+Rear) | CenterTorso(Front) | Head(Unknown),
|
|
||||||
jenner2c,No,Clan,10.000000,35.000000,FerroFiberus,Standard,0,,0,Yes,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M2/P0/B2/O0) | RightArm(M2/P0/B2/O0) | Special1(M3/P0/B0/O0),LeftArm(Unknown) | RightArm(Unknown) | Special1(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
koto,No,IS,7.000000,25.000000,FerroFiberus,EndoSteel,0,,0,No,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P1/B1/O0) | RightArm(M0/P1/B1/O0) | CenterTorso(M0/P0/B2/O0) | Special1(M0/P0/B3/O0),LeftArm(Unknown) | RightArm(Unknown) | CenterTorso(Unknown) | Special1(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
locust2c,No,Clan,7.000000,25.000000,FerroFiberus,EndoSteel,0,,0,No,Yes,No,No,4,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P0/B1/O2) | RightArm(M0/P0/B1/O2) | Special1(M0/P0/B3/O0),LeftArm(Unknown) | RightArm(Unknown) | Special1(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
marauder2,No,IS,22.000000,100.000000,FerroFiberus,EndoSteel,0,,0,Yes,No,Yes,No,6,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P0/B4/O1) | RightArm(M0/P0/B4/O1) | LeftTorso(M0/P0/B1/O1) | RightTorso(M0/P0/B1/O1) | Special1(M0/P7/B0/O0) | Special2(M0/P0/B0/O2),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown) | Special1(Unknown) | Special2(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
pitbull,No,Clan,15.000000,70.000000,FerroFiberus,EndoSteel,0,,0,Yes,No,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P2/B2/O0) | RightArm(M0/P2/B2/O0) | LeftTorso(M0/P0/B2/O0) | RightTorso(M0/P0/B2/O0) | Special1(M0/P4/B0/O0),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown) | Special1(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
privateer,No,IS,12.500000,55.000000,FerroFiberus,Standard,0,,0,No,No,Yes,No,2,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P1/B0/O1) | RightArm(M0/P1/B0/O1) | LeftTorso(M0/P2/B2/O0) | RightTorso(M0/P0/B1/O0) | Special1(M4/P0/B0/O0),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown) | Special1(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
razorback,No,IS,9.000000,30.000000,FerroFiberus,EndoSteel,0,,0,No,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M2/P0/B2/O0) | RightArm(M0/P0/B3/O0) | Special1(M0/P2/B0/O0) | Special2(M0/P2/B0/O0),LeftArm(Unknown) | RightArm(Unknown) | Special1(Unknown) | Special2(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
reaper,No,Clan,16.500000,75.000000,FerroFiberus,EndoSteel,0,,0,Yes,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P0/B3/O0) | RightArm(M0/P0/B3/O0) | LeftTorso(M0/P0/B2/O0) | RightTorso(M0/P0/B2/O0) | CenterTorso(M0/P6/B0/O0),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown) | CenterTorso(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
reaver,No,Clan,10.000000,40.000000,FerroFiberus,EndoSteel,0,,0,Yes,No,Yes,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P0/B3/O0) | RightArm(M0/P0/B3/O0) | LeftTorso(M0/P0/B1/O0) | RightTorso(M0/P0/B1/O0),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
shadowhawk,No,IS,12.500000,55.000000,FerroFiberus,Standard,0,,0,Yes,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P1/B2/O0) | RightArm(M0/P0/B3/O0) | LeftTorso(M0/P0/B1/O0) | RightTorso(M0/P0/B1/O0) | Special1(M0/P2/B0/O0) | Special2(M2/P0/B0/O0),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown) | Special1(Unknown) | Special2(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
strider,No,IS,11.000000,40.000000,FerroFiberus,Standard,0,,0,No,No,Yes,No,4,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M2/P0/B0/O0) | RightArm(M2/P0/B0/O0) | LeftTorso(M0/P0/B0/O2) | RightTorso(M0/P0/B0/O2) | CenterTorso(M0/P0/B2/O0),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown) | CenterTorso(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
urbanmech,Yes,IS,5.000000,30.000000,Standard,Standard,8,Single,0,Yes,Yes,No,No,50,,0.45,0.45,0.5,0.5,0.6,0.6,0.65,0.45,0.25,4.45,2,"SmallLaser, AC20",SmallLaser@LeftArm(Front) G1 | AC20@RightArm(Front) G1,LeftArmx1 | RightArmx1,LeftArm(M0/P0/B0/O12) | RightArm(M0/P0/B0/O12) | LeftTorso(M0/P0/B0/O12) | RightTorso(M0/P0/B0/O12) | CenterTorso(M0/P0/B0/O2),LeftArm(Front) | RightArm(Front) | LeftTorso(Unknown) | RightTorso(Unknown) | CenterTorso(Unknown),
|
|
||||||
urbanmech_iic,No,Clan,5.000000,30.000000,FerroFiberus,Standard,0,,0,Yes,Yes,No,No,,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P2/B2/O0) | RightArm(M0/P0/B4/O0) | LeftTorso(M0/P1/B0/O0) | RightTorso(M0/P1/B0/O0),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
ursus,No,Clan,10.500000,50.000000,FerroFiberus,Standard,0,,0,No,Yes,No,No,3,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P0/B0/O3) | RightArm(M0/P0/B4/O0) | CenterTorso(M2/P0/B0/O0) | Special1(M0/P0/B1/O0) | Special2(M0/P0/B1/O0),LeftArm(Unknown) | RightArm(Unknown) | CenterTorso(Unknown) | Special1(Unknown) | Special2(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
vulture2,No,Clan,16.500000,75.000000,FerroFiberus,EndoSteel,0,,0,No,Yes,No,No,5,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P3/B0/O0) | RightArm(M0/P0/B0/O3) | LeftTorso(M2/P0/B2/O0) | RightTorso(M2/P0/B2/O0) | Special1(M0/P0/B0/O2) | Special2(M0/P0/B2/O0),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown) | Special1(Unknown) | Special2(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
vulturec,No,Clan,14.000000,60.000000,FerroFiberus,Standard,0,,0,No,Yes,No,No,3,,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.9,0,,,,LeftArm(M0/P3/B0/O0) | RightArm(M0/P3/B0/O0) | LeftTorso(M2/P0/B0/O0) | RightTorso(M2/P0/B0/O0) | CenterTorso(M0/P0/B0/O1) | Special1(M0/P0/B0/O1) | Special2(M0/P0/B0/O1),LeftArm(Unknown) | RightArm(Unknown) | LeftTorso(Unknown) | RightTorso(Unknown) | CenterTorso(Unknown) | Special1(Unknown) | Special2(Unknown),"not registered in active mech tables; missing M_* mech ID defines; core mech files exist; not fully packaged (core.build, props.build, textures.build); missing display/name string IDs (IDS/DNL); no loose hsh bmp in Mechs/MFD/hud"
|
|
||||||
|
@@ -1,294 +0,0 @@
|
|||||||
# mech_loadouts.csv Catch-Up Notes
|
|
||||||
|
|
||||||
This document is for future AI agents or maintainers who need to understand how [mech_loadouts.csv](mech_loadouts.csv) was built, where each column comes from, and what files must be updated together when mech data changes.
|
|
||||||
|
|
||||||
## Purpose
|
|
||||||
|
|
||||||
`mech_loadouts.csv` is a flattened mech audit sheet built from the FireStorm content tree. It combines:
|
|
||||||
- mech identity and stat data
|
|
||||||
- current in-game playability status
|
|
||||||
- installed/default weapon loadouts
|
|
||||||
- weapon facing and grouping metadata
|
|
||||||
- zone hardpoint capacity
|
|
||||||
- notes about missing registration, packaging, or asset support
|
|
||||||
|
|
||||||
The CSV is not a primary source of truth. It is a synthesized report built from the mech content files and several registration tables.
|
|
||||||
|
|
||||||
## Current CSV Column Layout
|
|
||||||
|
|
||||||
The important derived columns are:
|
|
||||||
- `In_game_playable`
|
|
||||||
- `Weapons_With_Locations`
|
|
||||||
- `Default_Installed_Locations`
|
|
||||||
- `Available_Slot_Capacity_By_Zone`
|
|
||||||
- `Available_Hardpoints`
|
|
||||||
- `notes`
|
|
||||||
|
|
||||||
The existing stat columns before those are mostly direct mech data fields and were not re-derived during the audit.
|
|
||||||
|
|
||||||
## What Each Derived Column Means
|
|
||||||
|
|
||||||
### `In_game_playable`
|
|
||||||
|
|
||||||
`Yes` if the mech is currently in the active playable roster, `No` otherwise.
|
|
||||||
|
|
||||||
This was determined by comparing the mech folder set against the active registration chain:
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/MechLabHeaders.h`
|
|
||||||
- `Gameleap/mw4/Content/ShellScripts/MechLabHeaders.h`
|
|
||||||
- `Gameleap/mw4/Content/Tables/MechChassisTable.tbl`
|
|
||||||
- `Gameleap/mw4/Content/Tables/MechTable.tbl`
|
|
||||||
- `Gameleap/mw4/Content/core.build`
|
|
||||||
- plus supporting string and packaging manifests
|
|
||||||
|
|
||||||
Practical rule:
|
|
||||||
- folder presence alone does not make a mech playable
|
|
||||||
- playable mechs must have the ID/table/build registrations aligned
|
|
||||||
|
|
||||||
### `Weapons_With_Locations`
|
|
||||||
|
|
||||||
This column lists each installed weapon in the mech¡¯s default subsystem file, with:
|
|
||||||
- the weapon name
|
|
||||||
- the `InternalLocation`
|
|
||||||
- the `WeaponFacing`
|
|
||||||
- the weapon group
|
|
||||||
|
|
||||||
Current format:
|
|
||||||
- `WeaponName@Location(Facing) G#`
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
- `MediumPulseLaser@LeftTorso(Rear) G1`
|
|
||||||
- `SRM4@RightTorso(Front) G2`
|
|
||||||
- `ClanLRM10@LeftTorso(Side) G2`
|
|
||||||
|
|
||||||
Derived from the mech¡¯s `.subsystems` file by reading weapon subsystem blocks.
|
|
||||||
|
|
||||||
Important notes:
|
|
||||||
- `WeaponFacing=0` => `Front`
|
|
||||||
- `WeaponFacing=1` => `Rear`
|
|
||||||
- `WeaponFacing=2` => `Side`
|
|
||||||
- if `WeaponFacing` is absent, it defaults to `Front`
|
|
||||||
|
|
||||||
### `Default_Installed_Locations`
|
|
||||||
|
|
||||||
A compact count summary of where the mech¡¯s default weapons are installed, based on `InternalLocation` in the `.subsystems` file.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
- `LeftArmx2 | LeftTorsox3 | RightTorsox4 | RightArmx2`
|
|
||||||
|
|
||||||
This is about installed weapons, not slot capacity.
|
|
||||||
|
|
||||||
### `Available_Slot_Capacity_By_Zone`
|
|
||||||
|
|
||||||
A compact summary of zone capacities from the mech¡¯s `.damage` file.
|
|
||||||
|
|
||||||
Current format:
|
|
||||||
- `Zone(M# / P# / B# / O#)`
|
|
||||||
|
|
||||||
Where:
|
|
||||||
- `M` = MissileSlots
|
|
||||||
- `P` = ProjectileSlots
|
|
||||||
- `B` = BeamSlots
|
|
||||||
- `O` = OmniSlots
|
|
||||||
|
|
||||||
Example:
|
|
||||||
- `LeftTorso(M0/P2/B2/O0)`
|
|
||||||
|
|
||||||
This reflects what the mech can support in that zone, not what is currently installed.
|
|
||||||
|
|
||||||
### `Available_Hardpoints`
|
|
||||||
|
|
||||||
A list of zones that have at least one positive slot count in the `.damage` file.
|
|
||||||
|
|
||||||
Current format:
|
|
||||||
- `LeftArm(Front)`
|
|
||||||
- `LeftTorso(Front+Rear)`
|
|
||||||
- `RightTorso(Side)`
|
|
||||||
|
|
||||||
This column is a directional summary of where weapons can be mounted.
|
|
||||||
|
|
||||||
Important:
|
|
||||||
- this is derived from slot capacity plus facing information from weapon loadouts
|
|
||||||
- it is not a literal mechanical port map
|
|
||||||
- if a zone has multiple facing types in the mech¡¯s default loadout, it can show a combined label such as `Front+Rear` or `Front+Side`
|
|
||||||
|
|
||||||
## Core Data Sources
|
|
||||||
|
|
||||||
### 1. Mech registration and playability
|
|
||||||
|
|
||||||
Primary files:
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/MechLabHeaders.h`
|
|
||||||
- `Gameleap/mw4/Content/ShellScripts/MechLabHeaders.h`
|
|
||||||
- `Gameleap/mw4/Content/Tables/MechChassisTable.tbl`
|
|
||||||
- `Gameleap/mw4/Content/Tables/MechTable.tbl`
|
|
||||||
- `Gameleap/mw4/Content/core.build`
|
|
||||||
|
|
||||||
What they control:
|
|
||||||
- which mechs are actually in the active roster
|
|
||||||
- which IDs exist in code and script space
|
|
||||||
- which mech resources are packed into the runtime build
|
|
||||||
|
|
||||||
If a mech folder exists but it is not listed in these files, it is usually not playable.
|
|
||||||
|
|
||||||
### 2. Default weapon loadout and weapon-facing metadata
|
|
||||||
|
|
||||||
Primary file:
|
|
||||||
- `Gameleap/mw4/Content/Mechs/<MechName>/<mech>.subsystems`
|
|
||||||
|
|
||||||
Each weapon block typically contains:
|
|
||||||
- `Model=` weapon subsystem resource
|
|
||||||
- `InternalLocation=` where the weapon is mounted
|
|
||||||
- `Site=` mount port name
|
|
||||||
- `GroupIndex=` weapon group number
|
|
||||||
- `WeaponFacing=` optional facing metadata
|
|
||||||
- `AmmoCount=` for ammo-using weapons
|
|
||||||
|
|
||||||
The `.subsystems` file is the source for:
|
|
||||||
- `Weapons_With_Locations`
|
|
||||||
- `Default_Installed_Locations`
|
|
||||||
- facing annotations in the hardpoint summaries
|
|
||||||
|
|
||||||
### 3. Slot capacity / hardpoint support
|
|
||||||
|
|
||||||
Primary file:
|
|
||||||
- `Gameleap/mw4/Content/Mechs/<MechName>/<mech>.damage`
|
|
||||||
|
|
||||||
Each section such as `[LeftArmInternal]` or `[RightTorsoInternal]` may contain:
|
|
||||||
- `MissileSlots=`
|
|
||||||
- `ProjectileSlots=`
|
|
||||||
- `BeamSlots=`
|
|
||||||
- `OmniSlots=`
|
|
||||||
|
|
||||||
These are used to derive:
|
|
||||||
- `Available_Slot_Capacity_By_Zone`
|
|
||||||
- `Available_Hardpoints`
|
|
||||||
|
|
||||||
### 4. Weapon slot type rules in code
|
|
||||||
|
|
||||||
Relevant code:
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/MWDamageObject.cpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/MWDamageObject.hpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/MechLab.cpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/Subsystem_Tool.cpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/Weapon_Tool.cpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/Weapon.hpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/Weapon.cpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/hudweapon.cpp`
|
|
||||||
|
|
||||||
What the code does:
|
|
||||||
- reads slot counts from `.damage`
|
|
||||||
- reads `InternalLocation` and `WeaponFacing` from `.subsystems`
|
|
||||||
- maps weapon slot type and size from the weapon model
|
|
||||||
- assigns weapons to valid locations during mechlab editing
|
|
||||||
|
|
||||||
## Facing Semantics
|
|
||||||
|
|
||||||
Weapon facing is stored per weapon instance, not as a separate hardpoint label.
|
|
||||||
|
|
||||||
Values seen in the data/code:
|
|
||||||
- `0` = front
|
|
||||||
- `1` = rear
|
|
||||||
- `2` = side
|
|
||||||
|
|
||||||
Code references:
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/Weapon_Tool.cpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/Weapon.hpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/Weapon.cpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/hudweapon.cpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/MechLab.cpp`
|
|
||||||
|
|
||||||
Important nuance:
|
|
||||||
- a zone name like `LeftTorso` does not tell you the facing by itself
|
|
||||||
- the facing comes from the weapon block¡¯s `WeaponFacing`
|
|
||||||
- the same zone can contain multiple weapons with different facings
|
|
||||||
|
|
||||||
## Group Index Meaning
|
|
||||||
|
|
||||||
The `G1`, `G2`, etc. suffix in `Weapons_With_Locations` is the weapon group number from `GroupIndex` in the subsystem file.
|
|
||||||
|
|
||||||
This is not a location or facing field.
|
|
||||||
|
|
||||||
Meaning:
|
|
||||||
- `G1` = weapon group 1
|
|
||||||
- `G2` = weapon group 2
|
|
||||||
- and so on
|
|
||||||
|
|
||||||
## How The Spreadsheet Was Built
|
|
||||||
|
|
||||||
The CSV was assembled by cross-referencing:
|
|
||||||
- mech folder contents under `Gameleap/mw4/Content/Mechs/`
|
|
||||||
- `.subsystems` weapon blocks
|
|
||||||
- `.damage` internal zone capacities
|
|
||||||
- active roster tables and IDs
|
|
||||||
- string registration files
|
|
||||||
- build manifests
|
|
||||||
- loose UI art assets under `Gameleap/mw4/hsh/`
|
|
||||||
|
|
||||||
The output is a derived audit sheet, not a direct export from a single source file.
|
|
||||||
|
|
||||||
## Known Pitfalls
|
|
||||||
|
|
||||||
### 1. Folder presence does not mean playable
|
|
||||||
|
|
||||||
Some mech folders exist but are not in the active roster tables or headers. These need ID/table/build integration before they are usable in-game.
|
|
||||||
|
|
||||||
### 2. File names are not always canonical
|
|
||||||
|
|
||||||
Some mechs use alternate base filenames inside their folder. Do not assume `FolderName/FolderName.damage` or `FolderName/FolderName.subsystems` always exist.
|
|
||||||
|
|
||||||
Prefer:
|
|
||||||
- parse the `.instance` file when present
|
|
||||||
- otherwise detect the first matching `.subsystems` / `.damage` file by extension and content
|
|
||||||
|
|
||||||
### 3. `Available_Hardpoints` is a summary, not a literal port map
|
|
||||||
|
|
||||||
It summarizes zones with capacity and facing hints, but it does not enumerate every exact port or site name.
|
|
||||||
|
|
||||||
### 4. Rear-facing weapons are per-instance
|
|
||||||
|
|
||||||
If a mech has one rear-mounted weapon in a torso zone, that does not mean all weapons in that zone are rear-facing.
|
|
||||||
|
|
||||||
## Update Checklist For Future Changes
|
|
||||||
|
|
||||||
If a mech is added or changed, check these in order:
|
|
||||||
1. update or verify the mech `.data`, `.instance`, `.subsystems`, and `.damage` files
|
|
||||||
2. ensure the mech is added to the active ID header(s)
|
|
||||||
3. update `MechChassisTable.tbl` and `MechTable.tbl`
|
|
||||||
4. update `core.build` and any related build manifests
|
|
||||||
5. add any needed string IDs or script references
|
|
||||||
6. confirm the mech has the expected loose or packed art assets
|
|
||||||
7. rebuild the CSV derived columns if the data changed
|
|
||||||
|
|
||||||
## Useful File Map
|
|
||||||
|
|
||||||
### Mech data
|
|
||||||
- `Gameleap/mw4/Content/Mechs/<MechName>/`
|
|
||||||
|
|
||||||
### Roster and IDs
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/MechLabHeaders.h`
|
|
||||||
- `Gameleap/mw4/Content/ShellScripts/MechLabHeaders.h`
|
|
||||||
- `Gameleap/mw4/Content/Tables/MechChassisTable.tbl`
|
|
||||||
- `Gameleap/mw4/Content/Tables/MechTable.tbl`
|
|
||||||
|
|
||||||
### Slot/hardpoint logic
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/MWDamageObject.cpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/MechLab.cpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/Subsystem_Tool.cpp`
|
|
||||||
|
|
||||||
### Facing logic
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/Weapon.cpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/Weapon.hpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/Weapon_Tool.cpp`
|
|
||||||
- `Gameleap/code/mw4/Code/MW4/hudweapon.cpp`
|
|
||||||
|
|
||||||
### Build manifests
|
|
||||||
- `Gameleap/mw4/Content/core.build`
|
|
||||||
- `Gameleap/mw4/Content/props.build`
|
|
||||||
- `Gameleap/mw4/Content/textures.build`
|
|
||||||
|
|
||||||
## Current State Summary
|
|
||||||
|
|
||||||
At the time this doc was written:
|
|
||||||
- `mech_loadouts.csv` includes playability, default loadout, facing, hardpoint, and notes columns
|
|
||||||
- non-playable mechs are explicitly marked `No`
|
|
||||||
- Templar and other mechs with rear or side mounts have facing visible in the CSV
|
|
||||||
- the file is intended to be a living audit artifact for future data cleanup and enablement work
|
|
||||||
@@ -734,67 +734,6 @@ keeping old-RIO (type 0) protocol behavior byte-identical:
|
|||||||
call it via `-Command "& '...driver.ps1' game-start '-tbaud 115200'"` — `-File` binding
|
call it via `-Command "& '...driver.ps1' game-start '-tbaud 115200'"` — `-File` binding
|
||||||
rejects dash-leading positional args, and `Start-Process -ArgumentList` doesn't re-quote.
|
rejects dash-leading positional args, and `Start-Process -ArgumentList` doesn't re-quote.
|
||||||
|
|
||||||
## 📋 Branch `mfdsplit`: mech loadouts, time list, build fixes (2026-07-18)
|
|
||||||
|
|
||||||
### Mech loadout changes
|
|
||||||
- **Battlemaster IS** (`Content\Mechs\Battlemaster\battlemaster.subsystems`): replaced lone
|
|
||||||
MediumPulseLaser default with full stock IS loadout — PPC (Special2), 6×ML (3 RT, 3 LT),
|
|
||||||
2×MG (LA, 200 rds), SRM6 (Special1, 15 rds), all GroupIndex=1 except SRM6 (group 2).
|
|
||||||
- **Battlemaster Clan 2C** (`battlemaster2c.subsystems`): ER PPC (RA), 6×ER ML (3 RT, 3 LT),
|
|
||||||
2×Clan Gauss (LA, 16 rds each), Clan SSRM6 (Special1, 15 rds).
|
|
||||||
- **Behemoth / Behemoth2** (`.subsystems`): moved Gauss rifles from weapon group 3 → group 1
|
|
||||||
(3 occurrences each; gauss rifles now in group 1 alongside other main weapons).
|
|
||||||
|
|
||||||
### MP time-limit list fix (ConLobbyMission.script)
|
|
||||||
- Expanded from 9 → 18 entries (1–15, 20, 25, 30 min); `max_displayed=10` so dropdown scrolls.
|
|
||||||
- Fixed bare `else if` (missing braces) that caused a null-reference crash in the console lobby
|
|
||||||
when the commit was merged from `main`. This was the root cause of the `aa500be7` regression.
|
|
||||||
- Fixed `i==5` vs `i==6` max_displayed assignment for time vs radar dropdowns.
|
|
||||||
|
|
||||||
### Resource builder fix (build-resources.ps1) — VM / generic adapter support
|
|
||||||
- Builder now always runs with `-window` (windowed mode + DDrawCompat). Fullscreen native DDraw
|
|
||||||
fails on VMs with generic Microsoft display adapters (no hardware DDraw); windowed DDrawCompat
|
|
||||||
works on all tested configs including VMs.
|
|
||||||
- dgVoodoo2 D3D DLL interceptors (`D3D8.dll`, `D3D9.dll`, `D3DImm.dll`) in the working dir
|
|
||||||
silently break the builder (it exits 0 without building anything). These files were left over
|
|
||||||
from the abandoned dgVoodoo2 experiment (commit `87e25677`) — removed from repo (`git rm`).
|
|
||||||
The build script also moves any such files aside defensively via the `$dgvMoved` block.
|
|
||||||
- Removed all dead code for fullscreen fallback, bitdepth patching, ddraw move-aside logic.
|
|
||||||
- `dgVoodoo.conf` / `dgVoodooCpl.exe` also removed from `Gameleap\mw4\` (no longer in use).
|
|
||||||
- Expected behaviour on VM: a "Hardware Error: not compatible with MechWarrior 4" dialog appears
|
|
||||||
at the end of the build — this is a GameOS hardware-capability warning, NOT a fatal error.
|
|
||||||
Click OK; the .mw4 packages are built correctly regardless.
|
|
||||||
|
|
||||||
### Source tree Korean → English translation + UTF-8 cleanup (2026-07-18)
|
|
||||||
- Translated all EUC-KR/CP949 Korean developer comments to English across **84 source files**
|
|
||||||
(~876 lines). Zero Korean bytes remain outside intentional font-table headers (D3FFontEdit2/
|
|
||||||
fontedit `all.h` etc.). Files are now clean UTF-8 (no BOM), safe for any modern editor.
|
|
||||||
- Notable functional translations: `recscore.cpp` body-part return values and kill-announcer
|
|
||||||
format strings (gameplay-visible on Korean Windows; now English on all systems); `nonmfc.h`
|
|
||||||
assert dialog; GosView profiler `킪` → `us` (microseconds).
|
|
||||||
- Latin-1 chars converted to proper UTF-8: © in 3dsmax4/Maxscrpt headers (82 files), ® in
|
|
||||||
`gosHelp/Remote.cpp`, · bullet points in `ai command.hpp`, Û/ß in AnimationSuite headers.
|
|
||||||
- Font table `*.h` files (`D3FFontEdit2/`, `fontedit/`) intentionally left as-is (raw byte
|
|
||||||
values in C array data, not text).
|
|
||||||
- `korean_diff.html` (side-by-side GitHub-style diff, ~873 KB) committed as documentation.
|
|
||||||
|
|
||||||
### Language DLL: English version from source
|
|
||||||
- `Gameleap\mw4\Language.dll` and `MW4\Language.dll` replaced with the freshly compiled English
|
|
||||||
build from `Language - Win32 English` config (`Language.dsp`). Fixes Korean button labels in
|
|
||||||
the GameOS exception/crash dialog (`??? ??...` / `??` / `???` → More Details / Continue / Exit).
|
|
||||||
The old binary was the original Korean build from the 2009 dev machine.
|
|
||||||
|
|
||||||
### mw4print v2.0 additions
|
|
||||||
- **MySQL export** (`dbexport.h`/`dbexport.cpp`): late-bound runtime load of `libmysql.dll`
|
|
||||||
(no compile-time MySQL SDK needed). Exports match data (match, player_result, pvp, optional
|
|
||||||
event tables) to an external MySQL server after each print job. Schema in `db_schema.sql`.
|
|
||||||
Config via `mw4print.ini [MySQLExport]`; UI via File → Database Settings (Ctrl+D).
|
|
||||||
- **Configurable banner text**: File → Banner Setting... edits the bottom-of-sheet URL string
|
|
||||||
(was hardcoded `WWW.MECHJOCK.COM`). Persisted to `options.ini [battle tech print] BannerText=`.
|
|
||||||
- **libmysql.dll** (MySQL Connector/C 32-bit) added to `Gameleap\mw4\` so deploy copies it
|
|
||||||
alongside `mw4print.exe`.
|
|
||||||
- Version bumped to **2.0**, copyright year updated to **2026**.
|
|
||||||
|
|
||||||
## Next steps (proposed)
|
## Next steps (proposed)
|
||||||
- [x] ~~Windowed 3D viewport on Win11~~ — DONE via DDrawCompat (see STEP 8 viewport section).
|
- [x] ~~Windowed 3D viewport on Win11~~ — DONE via DDrawCompat (see STEP 8 viewport section).
|
||||||
- [ ] (Optional) Curate remaining WIP content as features are exercised (editor loads dev `Content\`).
|
- [ ] (Optional) Curate remaining WIP content as features are exercised (editor loads dev `Content\`).
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ char *TimeToString( double secs )
|
|||||||
else
|
else
|
||||||
if( secs*1000000.f >= 1.0f )
|
if( secs*1000000.f >= 1.0f )
|
||||||
{
|
{
|
||||||
sprintf(TimeStr,"%.2f us", secs*1000000.f);
|
sprintf(TimeStr,"%.2f µS", secs*1000000.f);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ const char *DivStrings[] =
|
|||||||
"1nS / div", // 10^-9
|
"1nS / div", // 10^-9
|
||||||
"10nS / div", // 10^-8
|
"10nS / div", // 10^-8
|
||||||
"100nS / div",
|
"100nS / div",
|
||||||
"1us / div",
|
"1µS / div",
|
||||||
"10us / div",
|
"10µS / div",
|
||||||
"100us / div",
|
"100µS / div",
|
||||||
"1mS / div",
|
"1mS / div",
|
||||||
"10mS / div",
|
"10mS / div",
|
||||||
"100mS / div",
|
"100mS / div",
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ char *TimeToString( double secs )
|
|||||||
else
|
else
|
||||||
if( secs*1000000.f >= 1.0f )
|
if( secs*1000000.f >= 1.0f )
|
||||||
{
|
{
|
||||||
sprintf(TimeStr,"%.2f us", secs*1000000.f);
|
sprintf(TimeStr,"%.2f µS", secs*1000000.f);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ const char *DivStrings[] =
|
|||||||
"1nS / div", // 10^-9
|
"1nS / div", // 10^-9
|
||||||
"10nS / div", // 10^-8
|
"10nS / div", // 10^-8
|
||||||
"100nS / div",
|
"100nS / div",
|
||||||
"1us / div",
|
"1µS / div",
|
||||||
"10us / div",
|
"10µS / div",
|
||||||
"100us / div",
|
"100µS / div",
|
||||||
"1mS / div",
|
"1mS / div",
|
||||||
"10mS / div",
|
"10mS / div",
|
||||||
"100mS / div",
|
"100mS / div",
|
||||||
|
|||||||
@@ -1032,19 +1032,19 @@ void __stdcall gos_SetViewport( DWORD LeftX, DWORD TopY, DWORD Width, DWORD Heig
|
|||||||
// You can only clear the backbuffer or Z buffer on the FIRST setup viewport (outside the Begin/End Scene
|
// You can only clear the backbuffer or Z buffer on the FIRST setup viewport (outside the Begin/End Scene
|
||||||
//
|
//
|
||||||
|
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
void __cdecl ClearTargetCameraBackBuffer()
|
void __cdecl ClearTargetCameraBackBuffer()
|
||||||
{
|
{
|
||||||
D3DRECT rc={0,10,120,112};
|
D3DRECT rc={0,10,120,112};
|
||||||
wClear(d3dDevice7,1,&rc,D3DCLEAR_TARGET,0xFF00FFFF,0,0);
|
wClear(d3dDevice7,1,&rc,D3DCLEAR_TARGET,0xFF00FFFF,0,0);
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
|
|
||||||
void __stdcall gos_SetupViewport( bool FillZ, float ZBuffer, bool FillBG, DWORD BGColor, float top, float left, float bottom, float right, bool ClearStencil, DWORD StencilValue )
|
void __stdcall gos_SetupViewport( bool FillZ, float ZBuffer, bool FillBG, DWORD BGColor, float top, float left, float bottom, float right, bool ClearStencil, DWORD StencilValue )
|
||||||
{
|
{
|
||||||
//sanghoon
|
//상훈짱...
|
||||||
//This violates the normal rules, so we suppress the ASSERT.
|
//원래의 법칙에 어긋나는 행동이기 때문에 ASSERT를 무시한다.
|
||||||
//gosASSERT( !InsideBeginScene || !(FillZ || FillBG) );
|
//gosASSERT( !InsideBeginScene || !(FillZ || FillBG) );
|
||||||
//
|
//
|
||||||
// Work out size of viewport
|
// Work out size of viewport
|
||||||
|
|||||||
@@ -47,11 +47,11 @@ extern DWORD gDisableJoystick;
|
|||||||
bool DisablePolling=0;
|
bool DisablePolling=0;
|
||||||
void CMRestoreEffects( int stick );
|
void CMRestoreEffects( int stick );
|
||||||
|
|
||||||
// hyun begin
|
// 鉉 - start
|
||||||
int g_bUseOrgJoy = TRUE;
|
int g_bUseOrgJoy = TRUE;
|
||||||
void (__stdcall *g_pfnRIO_Joy)(DIJOYSTATE& js) = NULL; // Check out Test ..
|
void (__stdcall *g_pfnRIO_Joy)(DIJOYSTATE& js) = NULL; // Check out Test ..
|
||||||
bool g_bNoWeaponRangeCheck = false;
|
bool g_bNoWeaponRangeCheck = false;
|
||||||
// hyun end
|
// 鉉 - end
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// Initialize the DirectInput devices
|
// Initialize the DirectInput devices
|
||||||
@@ -479,7 +479,7 @@ extern DWORD EnableDisplayInfo;
|
|||||||
|
|
||||||
if( EnableDisplayInfo==0 ) {
|
if( EnableDisplayInfo==0 ) {
|
||||||
disp:
|
disp:
|
||||||
sprintf(DisplayInfoText, "COIN: %d coins", g_nCoinCount);
|
sprintf(DisplayInfoText, "COIN: %d 코인이래요", g_nCoinCount);
|
||||||
EnableDisplayInfo = 1;
|
EnableDisplayInfo = 1;
|
||||||
} else if (EnableDisplayInfo==2) {
|
} else if (EnableDisplayInfo==2) {
|
||||||
if( timeGetTime() < EndDisplayInfoTime+50 ) {
|
if( timeGetTime() < EndDisplayInfoTime+50 ) {
|
||||||
|
|||||||
@@ -100,11 +100,11 @@ IDirectDraw7* DDobject = NULL; // Primiary DirectDraw object (for persistant
|
|||||||
IDirectDraw7* CurrentDDobject = NULL; // DirectDraw object for rendering (can be the same as DDObject)
|
IDirectDraw7* CurrentDDobject = NULL; // DirectDraw object for rendering (can be the same as DDObject)
|
||||||
IDirectDrawSurface7* ZBufferSurface = NULL; // ZBuffer surface
|
IDirectDrawSurface7* ZBufferSurface = NULL; // ZBuffer surface
|
||||||
IDirectDrawSurface7* RefZBufferSurface = NULL; // Referemce rasterizer ZBuffer surface
|
IDirectDrawSurface7* RefZBufferSurface = NULL; // Referemce rasterizer ZBuffer surface
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
IDirectDrawSurface7* SH_TargetBufferSurface = NULL;
|
IDirectDrawSurface7* SH_TargetBufferSurface = NULL;
|
||||||
IDirectDrawSurface7* SH_SwirlTexture= NULL;
|
IDirectDrawSurface7* SH_SwirlTexture= NULL;
|
||||||
IDirectDrawSurface7* SH_GameEndTexture= NULL;
|
IDirectDrawSurface7* SH_GameEndTexture= NULL;
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
|
|
||||||
DDSURFACEDESC2 BackBufferddsd;
|
DDSURFACEDESC2 BackBufferddsd;
|
||||||
//
|
//
|
||||||
@@ -167,7 +167,7 @@ float GammaSetting=0.0;
|
|||||||
bool UseGammaCorrection=0;
|
bool UseGammaCorrection=0;
|
||||||
float UserGamma=1.0f;
|
float UserGamma=1.0f;
|
||||||
|
|
||||||
//sanghoon begin
|
//����¯-begin
|
||||||
bool use_shgui = false;
|
bool use_shgui = false;
|
||||||
bool hsh_initialized=false;
|
bool hsh_initialized=false;
|
||||||
bool hsh_mrdev_initialized=false;
|
bool hsh_mrdev_initialized=false;
|
||||||
@@ -176,7 +176,7 @@ bool hsh_mrdev_initialized=false;
|
|||||||
#include "coord.cpp"
|
#include "coord.cpp"
|
||||||
//#include "hsh_dxras.cpp"
|
//#include "hsh_dxras.cpp"
|
||||||
#include "render.hpp"
|
#include "render.hpp"
|
||||||
//sanghoon end
|
//����¯-end
|
||||||
|
|
||||||
//
|
//
|
||||||
// Value range 0-10,000, default 750 (See DirectX docs)
|
// Value range 0-10,000, default 750 (See DirectX docs)
|
||||||
@@ -1021,11 +1021,11 @@ void EnterFullScreenMode()
|
|||||||
//
|
//
|
||||||
|
|
||||||
#ifdef LAB_ONLY
|
#ifdef LAB_ONLY
|
||||||
//sanghoon
|
//����¯
|
||||||
wSetCooperativeLevel( CurrentDDobject, hWindow, DDSCL_SETFOCUSWINDOW );
|
wSetCooperativeLevel( CurrentDDobject, hWindow, DDSCL_SETFOCUSWINDOW );
|
||||||
wSetCooperativeLevel( CurrentDDobject, hWindow, DDSCL_ALLOWREBOOT | DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN );
|
wSetCooperativeLevel( CurrentDDobject, hWindow, DDSCL_ALLOWREBOOT | DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN );
|
||||||
#else
|
#else
|
||||||
//sanghoon
|
//����¯
|
||||||
wSetCooperativeLevel( CurrentDDobject, hWindow, DDSCL_SETFOCUSWINDOW );
|
wSetCooperativeLevel( CurrentDDobject, hWindow, DDSCL_SETFOCUSWINDOW );
|
||||||
wSetCooperativeLevel( CurrentDDobject, hWindow, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN );
|
wSetCooperativeLevel( CurrentDDobject, hWindow, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN );
|
||||||
#endif
|
#endif
|
||||||
@@ -1127,11 +1127,11 @@ void EnterFullScreenMode()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//sanghoon begin
|
//����¯-begin
|
||||||
if(use_shgui){
|
if(use_shgui){
|
||||||
HSH_EnterFullScreen2();
|
HSH_EnterFullScreen2();
|
||||||
}
|
}
|
||||||
//sanghoon end
|
//����¯-end
|
||||||
|
|
||||||
//
|
//
|
||||||
// Changed modes, create all the surfaces
|
// Changed modes, create all the surfaces
|
||||||
@@ -1164,7 +1164,7 @@ void EnterFullScreenMode()
|
|||||||
// Debugging information
|
// Debugging information
|
||||||
//
|
//
|
||||||
SPEW(( GROUP_DIRECTDRAW, "EnterFullScreenMode() Finished" ));
|
SPEW(( GROUP_DIRECTDRAW, "EnterFullScreenMode() Finished" ));
|
||||||
//sanghoon
|
//����
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1289,7 +1289,7 @@ void DisplayBackBuffer()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
extern bool sh_game_started;
|
extern bool sh_game_started;
|
||||||
static FILE* fp=0;
|
static FILE* fp=0;
|
||||||
static recorded_count=0;
|
static recorded_count=0;
|
||||||
@@ -1352,11 +1352,11 @@ extern bool sh_game_started;
|
|||||||
pp=(double*)malloc(800*600*2);
|
pp=(double*)malloc(800*600*2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
#endif
|
#endif
|
||||||
wFlip( FrontBufferSurface,NULL,DDFLIP_DONOTWAIT );//|DDFLIP_INTERVAL2 );
|
wFlip( FrontBufferSurface,NULL,DDFLIP_DONOTWAIT );//|DDFLIP_INTERVAL2 );
|
||||||
//sanghoon marker..
|
//���� ��ħ..
|
||||||
//sanghoon
|
//����
|
||||||
//wFlip( FrontBufferSurface,NULL,DDFLIP_WAIT );
|
//wFlip( FrontBufferSurface,NULL,DDFLIP_WAIT );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1403,11 +1403,11 @@ extern bool sh_game_started;
|
|||||||
//
|
//
|
||||||
void DirectDrawRelease()
|
void DirectDrawRelease()
|
||||||
{
|
{
|
||||||
//sanghoon begin
|
//����¯-begin
|
||||||
if(use_shgui){
|
if(use_shgui){
|
||||||
HSH_DirectDrawRelease2();
|
HSH_DirectDrawRelease2();
|
||||||
}
|
}
|
||||||
//sanghoon end
|
//����¯-end
|
||||||
|
|
||||||
SPEW(( GROUP_DIRECTDRAW, "DirectDrawRelease()" ));
|
SPEW(( GROUP_DIRECTDRAW, "DirectDrawRelease()" ));
|
||||||
SafeFPU();
|
SafeFPU();
|
||||||
@@ -1496,7 +1496,7 @@ void DirectDrawRelease()
|
|||||||
wRelease( ZBufferSurface );
|
wRelease( ZBufferSurface );
|
||||||
ZBufferSurface=0;
|
ZBufferSurface=0;
|
||||||
}
|
}
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
//DirectDrawRelease
|
//DirectDrawRelease
|
||||||
if( SH_TargetBufferSurface)
|
if( SH_TargetBufferSurface)
|
||||||
{
|
{
|
||||||
@@ -1513,7 +1513,7 @@ void DirectDrawRelease()
|
|||||||
wRelease( SH_GameEndTexture );
|
wRelease( SH_GameEndTexture );
|
||||||
SH_GameEndTexture=0;
|
SH_GameEndTexture=0;
|
||||||
}
|
}
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
if( GammaControlInterface )
|
if( GammaControlInterface )
|
||||||
{
|
{
|
||||||
wRelease( GammaControlInterface );
|
wRelease( GammaControlInterface );
|
||||||
@@ -1593,20 +1593,20 @@ void DirectDrawCreateDDObject()
|
|||||||
//
|
//
|
||||||
// Create the NULL (primary) DirectDraw object
|
// Create the NULL (primary) DirectDraw object
|
||||||
//
|
//
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
/*
|
/*
|
||||||
wDirectDrawCreateEx( &DeviceArray[0].DeviceGUID, (void**)&DDobject, IID_IDirectDraw7, NULL );
|
wDirectDrawCreateEx( &DeviceArray[0].DeviceGUID, (void**)&DDobject, IID_IDirectDraw7, NULL );
|
||||||
// wDirectDrawCreateEx( &DeviceArray[Environment.FullScreenDevice].DeviceGUID, (void**)&DDobject, IID_IDirectDraw7, NULL );
|
// wDirectDrawCreateEx( &DeviceArray[Environment.FullScreenDevice].DeviceGUID, (void**)&DDobject, IID_IDirectDraw7, NULL );
|
||||||
wSetCooperativeLevel( DDobject, hWindow, DDSCL_NORMAL );
|
wSetCooperativeLevel( DDobject, hWindow, DDSCL_NORMAL );
|
||||||
CurrentDDobject=DDobject;
|
CurrentDDobject=DDobject;
|
||||||
*/
|
*/
|
||||||
//sanghoon ..
|
//���� �ҽ�..
|
||||||
//wDirectDrawCreateEx(&DeviceArray[0].DeviceGUID, (void**)&DDobject, IID_IDirectDraw7, NULL );
|
//wDirectDrawCreateEx(&DeviceArray[0].DeviceGUID, (void**)&DDobject, IID_IDirectDraw7, NULL );
|
||||||
wDirectDrawCreateEx(NULL, (void**)&DDobject, IID_IDirectDraw7, NULL );
|
wDirectDrawCreateEx(NULL, (void**)&DDobject, IID_IDirectDraw7, NULL );
|
||||||
|
|
||||||
wSetCooperativeLevel( DDobject, hWindow, DDSCL_NORMAL );
|
wSetCooperativeLevel( DDobject, hWindow, DDSCL_NORMAL );
|
||||||
CurrentDDobject=DDobject;
|
CurrentDDobject=DDobject;
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -1630,11 +1630,11 @@ bool SetupMode( bool FullScreen, DWORD Renderer )
|
|||||||
BackBufferSurface=0;
|
BackBufferSurface=0;
|
||||||
ClipperObject=0;
|
ClipperObject=0;
|
||||||
ZBufferSurface=0;
|
ZBufferSurface=0;
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
SH_TargetBufferSurface = 0;
|
SH_TargetBufferSurface = 0;
|
||||||
SH_SwirlTexture=0;
|
SH_SwirlTexture=0;
|
||||||
SH_GameEndTexture=0;
|
SH_GameEndTexture=0;
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
Maind3dDevice7=0;
|
Maind3dDevice7=0;
|
||||||
d3dDevice7=0;
|
d3dDevice7=0;
|
||||||
DDSURFACEDESC2 ddsd;
|
DDSURFACEDESC2 ddsd;
|
||||||
@@ -1993,7 +1993,7 @@ bool SetupMode( bool FullScreen, DWORD Renderer )
|
|||||||
}
|
}
|
||||||
wAddAttachedSurface( BackBufferSurface, ZBufferSurface );
|
wAddAttachedSurface( BackBufferSurface, ZBufferSurface );
|
||||||
|
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
{
|
{
|
||||||
DDSURFACEDESC2 rdesc;
|
DDSURFACEDESC2 rdesc;
|
||||||
memset(&rdesc,0,sizeof(ddsd));
|
memset(&rdesc,0,sizeof(ddsd));
|
||||||
@@ -2019,7 +2019,7 @@ bool SetupMode( bool FullScreen, DWORD Renderer )
|
|||||||
|
|
||||||
if(SUCCEEDED(wCreateSurface( CurrentDDobject, &rdesc, &SH_SwirlTexture, NULL ))){
|
if(SUCCEEDED(wCreateSurface( CurrentDDobject, &rdesc, &SH_SwirlTexture, NULL ))){
|
||||||
;
|
;
|
||||||
//Draw texture content to screen. .
|
//ȭ�鿡 �ؽ��� ������ ����.
|
||||||
}
|
}
|
||||||
|
|
||||||
rdesc.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_TEXTURESTAGE;
|
rdesc.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_TEXTURESTAGE;
|
||||||
@@ -2031,11 +2031,11 @@ bool SetupMode( bool FullScreen, DWORD Renderer )
|
|||||||
|
|
||||||
if(SUCCEEDED(wCreateSurface( CurrentDDobject, &rdesc, &SH_GameEndTexture, NULL ))){
|
if(SUCCEEDED(wCreateSurface( CurrentDDobject, &rdesc, &SH_GameEndTexture, NULL ))){
|
||||||
;
|
;
|
||||||
//Draw texture content to screen. .
|
//ȭ�鿡 �ؽ��� ������ ����.
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
//
|
//
|
||||||
// Get the Z buffer pixel format (nVidia may always match front bit depth)
|
// Get the Z buffer pixel format (nVidia may always match front bit depth)
|
||||||
//
|
//
|
||||||
@@ -2258,7 +2258,7 @@ Failed:
|
|||||||
wRelease( ZBufferSurface );
|
wRelease( ZBufferSurface );
|
||||||
ZBufferSurface=0;
|
ZBufferSurface=0;
|
||||||
}
|
}
|
||||||
//sanghoon
|
//����
|
||||||
//SetupMode
|
//SetupMode
|
||||||
if( SH_TargetBufferSurface)
|
if( SH_TargetBufferSurface)
|
||||||
{
|
{
|
||||||
@@ -2275,7 +2275,7 @@ Failed:
|
|||||||
wRelease( SH_SwirlTexture );
|
wRelease( SH_SwirlTexture );
|
||||||
SH_SwirlTexture=0;
|
SH_SwirlTexture=0;
|
||||||
}
|
}
|
||||||
//sanghoon
|
//����
|
||||||
if( ClipperObject )
|
if( ClipperObject )
|
||||||
{
|
{
|
||||||
if( FrontBufferSurface )
|
if( FrontBufferSurface )
|
||||||
@@ -2578,7 +2578,7 @@ void DirectDrawCreateAllBuffers()
|
|||||||
wRelease( ZBufferSurface );
|
wRelease( ZBufferSurface );
|
||||||
ZBufferSurface=0;
|
ZBufferSurface=0;
|
||||||
}
|
}
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
//DirectDrawCreateAllBuffers
|
//DirectDrawCreateAllBuffers
|
||||||
if( SH_TargetBufferSurface)
|
if( SH_TargetBufferSurface)
|
||||||
{
|
{
|
||||||
@@ -2595,7 +2595,7 @@ void DirectDrawCreateAllBuffers()
|
|||||||
wRelease( SH_SwirlTexture );
|
wRelease( SH_SwirlTexture );
|
||||||
SH_SwirlTexture=0;
|
SH_SwirlTexture=0;
|
||||||
}
|
}
|
||||||
//sanghoon marker
|
//���� ��
|
||||||
if( ClipperObject )
|
if( ClipperObject )
|
||||||
{
|
{
|
||||||
if( FrontBufferSurface )
|
if( FrontBufferSurface )
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ HRESULT wEndScene( IDirect3DDevice7* d3dDevice7 )
|
|||||||
|
|
||||||
//Original
|
//Original
|
||||||
//if( FAILED(result) )
|
//if( FAILED(result) )
|
||||||
//sanghoon
|
//상훈
|
||||||
if( FAILED(result) && result!=DDERR_SURFACELOST)
|
if( FAILED(result) && result!=DDERR_SURFACELOST)
|
||||||
PAUSE(( "FAILED (0x%x - %s) - EndScene()",result,ErrorNumberToMessage(result)));
|
PAUSE(( "FAILED (0x%x - %s) - EndScene()",result,ErrorNumberToMessage(result)));
|
||||||
|
|
||||||
|
|||||||
@@ -46,8 +46,6 @@ videoDevices BufferedDevices[8];
|
|||||||
int g_nDualHead = -1; // jcem
|
int g_nDualHead = -1; // jcem
|
||||||
int g_nDualHead2 = -1; // jcem
|
int g_nDualHead2 = -1; // jcem
|
||||||
int g_nNonDualHead = -1; // jcem
|
int g_nNonDualHead = -1; // jcem
|
||||||
int g_nMFD1 = -1; // mode 4: left 640x480 MFD monitor
|
|
||||||
int g_nMFD2 = -1; // mode 4: right 640x480 MFD monitor
|
|
||||||
// MSL 5.03 Mechview
|
// MSL 5.03 Mechview
|
||||||
int g_nMechViewType; // jcem : 0 - no mechview, 1 - on radar screen, 2 - on main screen
|
int g_nMechViewType; // jcem : 0 - no mechview, 1 - on radar screen, 2 - on main screen
|
||||||
|
|
||||||
@@ -382,20 +380,6 @@ void FindVideoCards()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Mode 4 (split dual 640x480): find two extra D3D devices beyond
|
|
||||||
// FullScreenDevice and g_nNonDualHead. These need no special resolution.
|
|
||||||
{
|
|
||||||
int found = 0;
|
|
||||||
for (int t0 = 0; t0 < NumDevices && found < 2; t0++) {
|
|
||||||
if (t0 == Environment.FullScreenDevice) continue;
|
|
||||||
if (t0 == g_nNonDualHead) continue;
|
|
||||||
if (DeviceArray[t0].D3DCaps.dwDevCaps & D3DDEVCAPS_HWRASTERIZATION) {
|
|
||||||
if (found == 0) g_nMFD1 = t0;
|
|
||||||
else g_nMFD2 = t0;
|
|
||||||
found++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// jcem
|
// jcem
|
||||||
//
|
//
|
||||||
// Check any known video cards have up to date drivers (Only on Windows9x)
|
// Check any known video cards have up to date drivers (Only on Windows9x)
|
||||||
|
|||||||
@@ -834,11 +834,11 @@ __int64 ProfileRenderEnd( __int64 RenderTime )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//sanghoon begin
|
//상훈짱 begin
|
||||||
#include "render.hpp"
|
#include "render.hpp"
|
||||||
HRESULT App_Render( LPDIRECT3DDEVICE7 pd3dDevice,LPDIRECTDRAWSURFACE7 pddsTexture);
|
HRESULT App_Render( LPDIRECT3DDEVICE7 pd3dDevice,LPDIRECTDRAWSURFACE7 pddsTexture);
|
||||||
|
|
||||||
//sanghoon end
|
//상훈짱 end
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -915,8 +915,8 @@ void gos_UpdateDisplay( bool Everything )
|
|||||||
ProfileTime( TimeClearViewPort, gos_SetupViewport( 0, 0, 1, 0x303050 , 0.0, 0.0, 1.0, 1.0 ) );
|
ProfileTime( TimeClearViewPort, gos_SetupViewport( 0, 0, 1, 0x303050 , 0.0, 0.0, 1.0, 1.0 ) );
|
||||||
TimeInClearViewPort+=TimeClearViewPort;
|
TimeInClearViewPort+=TimeClearViewPort;
|
||||||
}
|
}
|
||||||
//sanghoon begin
|
//상훈짱 begin
|
||||||
//Draw background image to backbuffer...
|
//backbuffer에 Background Image를 그린다...
|
||||||
|
|
||||||
if(hsh_initialized){
|
if(hsh_initialized){
|
||||||
// 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual)
|
// 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual)
|
||||||
@@ -940,25 +940,13 @@ void gos_UpdateDisplay( bool Everything )
|
|||||||
radar_device.BeginScene();
|
radar_device.BeginScene();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
|
||||||
// Step 0: clear + grid for radar and LEFT MFD.
|
|
||||||
// Step 1: clear + grid for RIGHT MFD (staggered so the right
|
|
||||||
// flip at new sh_step==1 shows channels 3-4 from the previous
|
|
||||||
// cycle, not a freshly-cleared buffer).
|
|
||||||
if(sh_step==0){
|
|
||||||
radar_device.BeginScene();
|
|
||||||
mfd_device.BeginScene(); // left device only
|
|
||||||
} else if(sh_step==1) {
|
|
||||||
mfd_device.BeginSceneRight(); // right device clear + grid
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}else if(hsh_mrdev_initialized){
|
}else if(hsh_mrdev_initialized){
|
||||||
mr_device.BeginScene();
|
mr_device.BeginScene();
|
||||||
}
|
}
|
||||||
|
|
||||||
//HSH_RenderAux1SmallMech();
|
//HSH_RenderAux1SmallMech();
|
||||||
//sanghoon end
|
//상훈짱 end
|
||||||
if (g_pfnCTCL_AfterBeginScene) {
|
if (g_pfnCTCL_AfterBeginScene) {
|
||||||
(*g_pfnCTCL_AfterBeginScene)();
|
(*g_pfnCTCL_AfterBeginScene)();
|
||||||
}
|
}
|
||||||
@@ -1055,7 +1043,7 @@ void gos_UpdateDisplay( bool Everything )
|
|||||||
LOG_BLOCK("Gos::UpdateDebugger()");
|
LOG_BLOCK("Gos::UpdateDebugger()");
|
||||||
ProfileTime( TimeDebugger, UpdateDebugger() );
|
ProfileTime( TimeDebugger, UpdateDebugger() );
|
||||||
}
|
}
|
||||||
//sanghoon
|
//상훈..
|
||||||
#if 1
|
#if 1
|
||||||
extern LPDIRECT3DDEVICE7 d3dDevice7;
|
extern LPDIRECT3DDEVICE7 d3dDevice7;
|
||||||
static bool preload_GameEndScreem=true;;
|
static bool preload_GameEndScreem=true;;
|
||||||
@@ -1089,8 +1077,8 @@ void gos_UpdateDisplay( bool Everything )
|
|||||||
//
|
//
|
||||||
// Flip or Blit the current image onto the display
|
// Flip or Blit the current image onto the display
|
||||||
//
|
//
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
//Perform the Flip.
|
//Flip을 한다.
|
||||||
if(hsh_initialized){
|
if(hsh_initialized){
|
||||||
// 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual)
|
// 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual)
|
||||||
switch(g_nTypeOfMFDs) {
|
switch(g_nTypeOfMFDs) {
|
||||||
@@ -1118,32 +1106,13 @@ void gos_UpdateDisplay( bool Everything )
|
|||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
break;
|
break;
|
||||||
case 4:
|
|
||||||
// 7-step cadence. Radar + left MFD flip on step 0 (same as mode 1).
|
|
||||||
// Right MFD flip is staggered to step 1 so that three back-to-back
|
|
||||||
// DGVoodoo2 Present() calls don't all land in the same frame and
|
|
||||||
// cause rhythmic stutter on the main display.
|
|
||||||
// Right device finishes rendering at step 6 (channel 4), so
|
|
||||||
// flipping at step 1 is still correct timing.
|
|
||||||
sh_step++;
|
|
||||||
sh_step%=7;
|
|
||||||
if(sh_step==0) {
|
|
||||||
radar_device.EndScene();
|
|
||||||
radar_device.pDDSFront->Flip(0,DDFLIP_DONOTWAIT|DDFLIP_NOVSYNC);
|
|
||||||
mfd_device.EndScene();
|
|
||||||
mfd_device.pDDSFront->Flip(0,DDFLIP_DONOTWAIT|DDFLIP_NOVSYNC);
|
|
||||||
} else if(sh_step==1) {
|
|
||||||
if (mfd_device_right.pDDSFront)
|
|
||||||
mfd_device_right.pDDSFront->Flip(0,DDFLIP_DONOTWAIT|DDFLIP_NOVSYNC);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}else if(hsh_mrdev_initialized){
|
}else if(hsh_mrdev_initialized){
|
||||||
mr_device.EndScene();
|
mr_device.EndScene();
|
||||||
mr_device.pDDSFront->Flip(0,DDFLIP_DONOTWAIT|DDFLIP_NOVSYNC);
|
mr_device.pDDSFront->Flip(0,DDFLIP_DONOTWAIT|DDFLIP_NOVSYNC);
|
||||||
}
|
}
|
||||||
|
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
{
|
{
|
||||||
LOG_BLOCK("Gos::DisplayBackBuffer()");
|
LOG_BLOCK("Gos::DisplayBackBuffer()");
|
||||||
ProfileTime( TimeDisplay, DisplayBackBuffer() );
|
ProfileTime( TimeDisplay, DisplayBackBuffer() );
|
||||||
|
|||||||
@@ -44,9 +44,9 @@ extern DWORD gNumLockMode;
|
|||||||
extern DWORD gCapLockMode;
|
extern DWORD gCapLockMode;
|
||||||
extern DWORD gScrollLockMode;
|
extern DWORD gScrollLockMode;
|
||||||
|
|
||||||
// hyun begin
|
// úè - start
|
||||||
void (__stdcall *g_pfnRIO_ButtonEvent)(BYTE* by) = NULL;
|
void (__stdcall *g_pfnRIO_ButtonEvent)(BYTE* by) = NULL;
|
||||||
// hyun end
|
// úè - end
|
||||||
//
|
//
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -106,14 +106,14 @@ LRESULT CALLBACK GameOSWinProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||||||
|
|
||||||
switch( uMsg )
|
switch( uMsg )
|
||||||
{
|
{
|
||||||
// hyun
|
// úè
|
||||||
case WM_USER + 100:
|
case WM_USER + 100:
|
||||||
{
|
{
|
||||||
// hyun begin
|
// úè - start
|
||||||
if (g_pfnRIO_ButtonEvent) {
|
if (g_pfnRIO_ButtonEvent) {
|
||||||
(*g_pfnRIO_ButtonEvent)((BYTE*)&lParam);
|
(*g_pfnRIO_ButtonEvent)((BYTE*)&lParam);
|
||||||
}
|
}
|
||||||
// hyun end
|
// úè - end
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -163,13 +163,13 @@ static bool IsValidAlphaPair( DIBSECTION& dib,DIBSECTION& diba)
|
|||||||
|
|
||||||
if(dib.dsBmih.biHeight<0 || diba.dsBmih.biHeight<0)return false;
|
if(dib.dsBmih.biHeight<0 || diba.dsBmih.biHeight<0)return false;
|
||||||
|
|
||||||
//Does it satisfy the pixel format requirement?
|
//픽셀 포맷을 일단 만족하는가?
|
||||||
if(!(bm.bmBitsPixel==24 && bma.bmBitsPixel==8))return false;
|
if(!(bm.bmBitsPixel==24 && bma.bmBitsPixel==8))return false;
|
||||||
|
|
||||||
//Are the bitmap dimensions (X,Y) both powers of 2?
|
//비트맵의 크기가 X,Y모두 2의 지수승인가?
|
||||||
if(!(IsTextureDimension(w) && IsTextureDimension(h)))return false;
|
if(!(IsTextureDimension(w) && IsTextureDimension(h)))return false;
|
||||||
|
|
||||||
//Are RGB and Alpha bitmaps the same size?
|
//RGB와 A비트맵의 크기가 같은가?
|
||||||
if(bma.bmWidth!=w || bma.bmHeight!=h)return NULL;
|
if(bma.bmWidth!=w || bma.bmHeight!=h)return NULL;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -408,7 +408,7 @@ bool __cdecl DrawBitmapToSurface(LPDIRECTDRAWSURFACE7 pddsTexture,int x,int y,co
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Create texture with Alpha from 8-bit Bitmap..
|
//8Bit Bitmap으로부터.. Alpha를 가진 텍스쳐를 만든다.
|
||||||
static LPDIRECTDRAWSURFACE7 CreateATextureFromBitmap(LPDIRECTDRAW7 pDD,HBITMAP hbm )
|
static LPDIRECTDRAWSURFACE7 CreateATextureFromBitmap(LPDIRECTDRAW7 pDD,HBITMAP hbm )
|
||||||
{
|
{
|
||||||
BITMAP bm={0,};
|
BITMAP bm={0,};
|
||||||
@@ -442,7 +442,7 @@ static LPDIRECTDRAWSURFACE7 CreateATextureFromBitmap(LPDIRECTDRAW7 pDD,HBITMAP h
|
|||||||
|
|
||||||
LPDIRECTDRAWSURFACE7 CreateATextureFromFile(LPDIRECTDRAW7 pDD, CHAR* strName )
|
LPDIRECTDRAWSURFACE7 CreateATextureFromFile(LPDIRECTDRAW7 pDD, CHAR* strName )
|
||||||
{
|
{
|
||||||
//Copy text content to Clipboard...
|
//ClipBoard.에 텍스트 내용을 복사한다...
|
||||||
/*
|
/*
|
||||||
OpenClipboard(hWindow);
|
OpenClipboard(hWindow);
|
||||||
HGLOBAL h=GlobalAlloc(GMEM_MOVEABLE,512);
|
HGLOBAL h=GlobalAlloc(GMEM_MOVEABLE,512);
|
||||||
@@ -531,7 +531,7 @@ bool CHSH_Device::InitFirst(int devicenum,DWORD resx,DWORD resy, CHSH_Device* pO
|
|||||||
pDD = pOtherHSHD->pDD;
|
pDD = pOtherHSHD->pDD;
|
||||||
} else {
|
} else {
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
//1. Resolution change.
|
//1. 해상도 변경.
|
||||||
wDirectDrawCreateEx( &DeviceArray[devicenum].DeviceGUID , (VOID**) &(pDD), IID_IDirectDraw7, NULL );
|
wDirectDrawCreateEx( &DeviceArray[devicenum].DeviceGUID , (VOID**) &(pDD), IID_IDirectDraw7, NULL );
|
||||||
pDD->SetCooperativeLevel(hWindow, dwFlags );
|
pDD->SetCooperativeLevel(hWindow, dwFlags );
|
||||||
hr=pDD->SetDisplayMode( resx, resy, 16, 60, 0 );
|
hr=pDD->SetDisplayMode( resx, resy, 16, 60, 0 );
|
||||||
@@ -846,10 +846,10 @@ void CHSH_Device::DrawThickFrameList(int framecount,RECT* prc,int t,DWORD dwColo
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Texture coordinates.. u1,v1,u2,v2
|
//texture 좌표.. u1,v1,u2,v2
|
||||||
//Texture rotation axis tx,ty
|
//texture 회전축 tx,ty
|
||||||
//Screen rotation axis x,y
|
//screen 회전축 x,y
|
||||||
//Rotation angle e
|
//회전각 e
|
||||||
|
|
||||||
void CHSH_Device::DrawTextureRotate(float u1,float v1,float u2,float v2,float tx,float ty,float x,float y,float e,DWORD color)
|
void CHSH_Device::DrawTextureRotate(float u1,float v1,float u2,float v2,float tx,float ty,float x,float y,float e,DWORD color)
|
||||||
{
|
{
|
||||||
@@ -858,9 +858,9 @@ void CHSH_Device::DrawTextureRotate(float u1,float v1,float u2,float v2,float tx
|
|||||||
float U2=u2-tx;
|
float U2=u2-tx;
|
||||||
float V2=v2-ty;
|
float V2=v2-ty;
|
||||||
|
|
||||||
//(U1,V1),(U2,V1),(U1,V2),(U2,V2) four pairs are rotation-transformed.
|
//(U1,V1),(U2,V1),(U1,V2),(U2,V2)네쌍을 회전변환 시킨다.
|
||||||
//pt[0][0]....
|
//pt[0][0]....
|
||||||
//Add x,y to each axis.
|
//거기에.. 각 축에..x,y를 더해준다.
|
||||||
float cose=cosf(e);
|
float cose=cosf(e);
|
||||||
float cos_u1=cose*U1;
|
float cos_u1=cose*U1;
|
||||||
float cos_u2=cose*U2;
|
float cos_u2=cose*U2;
|
||||||
@@ -883,11 +883,11 @@ void CHSH_Device::DrawTextureRotate(float u1,float v1,float u2,float v2,float tx
|
|||||||
pt[3][1] = sin_u2+cos_v2+y;
|
pt[3][1] = sin_u2+cos_v2+y;
|
||||||
|
|
||||||
//HSH_Draw3DTexture2(0,pt,0xFF00FF00,u1, v1/256.0f, u2/256.0f, v2/256.0f);
|
//HSH_Draw3DTexture2(0,pt,0xFF00FF00,u1, v1/256.0f, u2/256.0f, v2/256.0f);
|
||||||
//Then translate all by x,y again.
|
//거기에다가 모두 x,y를 다시 이동 시킨다.
|
||||||
DrawTexture(pt,color,u1,v1,u2,v2);
|
DrawTexture(pt,color,u1,v1,u2,v2);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Scaled arbitrarily. x1,y1,x2,y2
|
//임의로 스케일된다. x1,y1,x2,y2
|
||||||
void CHSH_Device::DrawTexture(float x1,float y1,float x2,float y2,DWORD dwColor, float u1,float v1,float u2,float v2)
|
void CHSH_Device::DrawTexture(float x1,float y1,float x2,float y2,DWORD dwColor, float u1,float v1,float u2,float v2)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -900,7 +900,7 @@ void CHSH_Device::DrawTexture(float x1,float y1,float x2,float y2,DWORD dwColor,
|
|||||||
pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX ,v,4,0 );
|
pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX ,v,4,0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
//Scaled arbitrarily. x,y,width,height
|
//임의로 스케일된다. x,y,width,height
|
||||||
void CHSH_Device::DrawTexture2(float x,float y,float w,float h,DWORD dwColor, float u1,float v1,float u2,float v2)
|
void CHSH_Device::DrawTexture2(float x,float y,float w,float h,DWORD dwColor, float u1,float v1,float u2,float v2)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -914,7 +914,7 @@ void CHSH_Device::DrawTexture2(float x,float y,float w,float h,DWORD dwColor, fl
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Not scaled....
|
//스케일 되지 않는....
|
||||||
void CHSH_Device::DrawTexture(float x,float y,DWORD dwColor, float u1,float v1,float u2,float v2)
|
void CHSH_Device::DrawTexture(float x,float y,DWORD dwColor, float u1,float v1,float u2,float v2)
|
||||||
{
|
{
|
||||||
D3DTLVERTEX v[4];
|
D3DTLVERTEX v[4];
|
||||||
@@ -945,8 +945,6 @@ void CHSH_Device::DrawTexture(float pt[4][2],DWORD dwColor,float tx1,float ty1,f
|
|||||||
|
|
||||||
extern int g_nDualHead;
|
extern int g_nDualHead;
|
||||||
extern int g_nNonDualHead;
|
extern int g_nNonDualHead;
|
||||||
extern int g_nMFD1; // mode 4: left 640x480 MFD monitor
|
|
||||||
extern int g_nMFD2; // mode 4: right 640x480 MFD monitor
|
|
||||||
// MSL 5.03 Mechview
|
// MSL 5.03 Mechview
|
||||||
extern int g_nMechViewType; // jcem : 0 - no mechview, 1 - on radar screen, 2 - on main screen
|
extern int g_nMechViewType; // jcem : 0 - no mechview, 1 - on radar screen, 2 - on main screen
|
||||||
|
|
||||||
@@ -978,11 +976,11 @@ bool CMR_Device::InitFirst()
|
|||||||
bool CMR_Device::InitSecond()
|
bool CMR_Device::InitSecond()
|
||||||
{
|
{
|
||||||
map_loaded=false;
|
map_loaded=false;
|
||||||
CHSH_Device::InitSecond(0,0); // no off screen - do not create Target Texture.
|
CHSH_Device::InitSecond(0,0); // no off screen - Target Texture를 그리지 않는다.
|
||||||
|
|
||||||
char temppath[MAX_PATH],temppatha[MAX_PATH];
|
char temppath[MAX_PATH],temppatha[MAX_PATH];
|
||||||
|
|
||||||
//1. Surface for background image
|
//1. 백그라운드이미지용 Surface
|
||||||
sprintf(temppath,"%s\\hsh\\%s",AssetsDirectory1,"mr_background.bmp");
|
sprintf(temppath,"%s\\hsh\\%s",AssetsDirectory1,"mr_background.bmp");
|
||||||
pDDSBackground=CreateSurfaceFromFile(pDD,temppath);
|
pDDSBackground=CreateSurfaceFromFile(pDD,temppath);
|
||||||
|
|
||||||
@@ -990,12 +988,12 @@ bool CMR_Device::InitSecond()
|
|||||||
MessageBeep(0);
|
MessageBeep(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//2. General-purpose texture
|
//2. 범용 텍스쳐
|
||||||
sprintf(temppath,"%s\\hsh\\%s",AssetsDirectory1,"mr_texture.bmp");
|
sprintf(temppath,"%s\\hsh\\%s",AssetsDirectory1,"mr_texture.bmp");
|
||||||
sprintf(temppatha,"%s\\hsh\\%s",AssetsDirectory1,"mr_texturea.bmp");
|
sprintf(temppatha,"%s\\hsh\\%s",AssetsDirectory1,"mr_texturea.bmp");
|
||||||
pDDSTexture=CreateRGBATextureFromFile(pDD, temppath,temppatha,16);
|
pDDSTexture=CreateRGBATextureFromFile(pDD, temppath,temppatha,16);
|
||||||
|
|
||||||
//3. Texture for map..
|
//3. 맵용 텍스쳐..
|
||||||
pDDSMapTexture=CreatePixelFormatTexture(pDD,256,256,&DDPF_R5G6B5);
|
pDDSMapTexture=CreatePixelFormatTexture(pDD,256,256,&DDPF_R5G6B5);
|
||||||
|
|
||||||
tw=256;
|
tw=256;
|
||||||
@@ -1008,17 +1006,17 @@ bool CMR_Device::InitSecond()
|
|||||||
|
|
||||||
bool CMR_Device::BeginScene()
|
bool CMR_Device::BeginScene()
|
||||||
{
|
{
|
||||||
//Set the Render Target.
|
//Render Target을 설정한다.
|
||||||
//SetRenderTargetTexture();
|
//SetRenderTargetTexture();
|
||||||
|
|
||||||
|
|
||||||
//Draw background image to Texture. Used as a substitute for Clear..
|
//Texture에.. background image를 그린다. 일종의 Clear대신이다..
|
||||||
if(sh_game_started){
|
if(sh_game_started){
|
||||||
//Draw background only when game has started.
|
//게임이 시작되었을때만 백그라운드를 그린다.
|
||||||
RECT rc={0,0,640,480};
|
RECT rc={0,0,640,480};
|
||||||
pDDSBack->BltFast(0,0,pDDSBackground,&rc,0);
|
pDDSBack->BltFast(0,0,pDDSBackground,&rc,0);
|
||||||
}else{
|
}else{
|
||||||
//If game has not started.. show blank.
|
//게임이 시작되지 않았으면.. blank를 보여준다.
|
||||||
pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET ,0,1.0f,0);
|
pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET ,0,1.0f,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1068,23 +1066,6 @@ bool CMR_Device::LoadMRTargetTexture(const char *mechtexturename)
|
|||||||
|
|
||||||
CMR_Device mr_device;
|
CMR_Device mr_device;
|
||||||
|
|
||||||
// Mode 4: the right-hand 640x480 MFD device. Shares VRAM with mfd_device
|
|
||||||
// (same GPU), so mfd_device's pDDSTarget texture can be passed to this
|
|
||||||
// device's pD3DDevice->SetTexture without a copy.
|
|
||||||
CMFDRight_Device mfd_device_right;
|
|
||||||
|
|
||||||
bool CMFDRight_Device::InitFirst()
|
|
||||||
{
|
|
||||||
// Take over g_nMFD2 monitor at 640x480 fullscreen.
|
|
||||||
return CHSH_Device::InitFirst(g_nMFD2, 640, 480);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CMFDRight_Device::InitSecond()
|
|
||||||
{
|
|
||||||
// Create flip chain, D3D device and a render-target slot (1024x512).
|
|
||||||
return CHSH_Device::InitSecond(1024, 512);
|
|
||||||
}
|
|
||||||
|
|
||||||
/////////////////////////////////// CRadar_Device ///////////////////////////////////
|
/////////////////////////////////// CRadar_Device ///////////////////////////////////
|
||||||
const char g_szRadarShutdown[] = "SHUT\nDOWN";
|
const char g_szRadarShutdown[] = "SHUT\nDOWN";
|
||||||
const char g_szRadarStartup[] = "START\nUP";
|
const char g_szRadarStartup[] = "START\nUP";
|
||||||
@@ -1171,18 +1152,18 @@ bool CRadar_Device::InitSecond()
|
|||||||
|
|
||||||
bool CRadar_Device::BeginScene()
|
bool CRadar_Device::BeginScene()
|
||||||
{
|
{
|
||||||
//Set the Render Target.
|
//Render Target을 설정한다.
|
||||||
SetRenderTargetTexture();
|
SetRenderTargetTexture();
|
||||||
|
|
||||||
|
|
||||||
//Draw background image to Texture. Used as a substitute for Clear..
|
//Texture에.. background image를 그린다. 일종의 Clear대신이다..
|
||||||
if(sh_game_started){
|
if(sh_game_started){
|
||||||
//Draw background only when game has started.
|
//게임이 시작되었을때만 백그라운드를 그린다.
|
||||||
RECT rc={0,0,480,640};
|
RECT rc={0,0,480,640};
|
||||||
pDDSTarget->BltFast(0,0,pDDSBackground,&rc,0);
|
pDDSTarget->BltFast(0,0,pDDSBackground,&rc,0);
|
||||||
if(IsMechShutdown())
|
if(IsMechShutdown())
|
||||||
{
|
{
|
||||||
//Clear map area.
|
//지도 영역을 지운다.
|
||||||
RECT rc={140,407,340,607};
|
RECT rc={140,407,340,607};
|
||||||
|
|
||||||
DDBLTFX fx={0,};
|
DDBLTFX fx={0,};
|
||||||
@@ -1192,15 +1173,15 @@ bool CRadar_Device::BeginScene()
|
|||||||
pDDSTarget->Blt(&rc,NULL,NULL,DDBLT_COLORFILL ,&fx);
|
pDDSTarget->Blt(&rc,NULL,NULL,DDBLT_COLORFILL ,&fx);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
//If game has not started.. show blank.
|
//게임이 시작되지 않았으면.. blank를 보여준다.
|
||||||
pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET ,0,1.0f,0);
|
pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET ,0,1.0f,0);
|
||||||
}
|
}
|
||||||
pD3DDevice->BeginScene();
|
pD3DDevice->BeginScene();
|
||||||
if(sh_game_started && IsMechShutdown()){
|
if(sh_game_started && IsMechShutdown()){
|
||||||
//Draw shutdown button.
|
//shut down button을 그린다.
|
||||||
int state[12]={0,2,0,};
|
int state[12]={0,2,0,};
|
||||||
state[3]=recent_state[3];//flush state: use the most recent value.
|
state[3]=recent_state[3];//flush state는.. 최근 값을 가져다 쓴다.
|
||||||
state[11]=recent_state[11];//flush state: use the most recent value.
|
state[11]=recent_state[11];//flush state는.. 최근 값을 가져다 쓴다.
|
||||||
if (!g_aaRadarText[0][0])
|
if (!g_aaRadarText[0][0])
|
||||||
strcpy(&g_aaRadarText[0][0], g_szRadarJumpjet);
|
strcpy(&g_aaRadarText[0][0], g_szRadarJumpjet);
|
||||||
strcpy(&g_aaRadarText[1][0], g_szRadarStartup);
|
strcpy(&g_aaRadarText[1][0], g_szRadarStartup);
|
||||||
@@ -1294,7 +1275,7 @@ POINTF radar_text_pos[12]={
|
|||||||
//state 1:ready
|
//state 1:ready
|
||||||
//state 2:activated
|
//state 2:activated
|
||||||
|
|
||||||
//Has a different meaning in pilot mode.
|
//pilot mode에서는 다른 의미를 갖는다.
|
||||||
|
|
||||||
bool CRadar_Device::DrawBackText(int state[12])
|
bool CRadar_Device::DrawBackText(int state[12])
|
||||||
{
|
{
|
||||||
@@ -1368,7 +1349,7 @@ static DWORD channel_color[6]={
|
|||||||
|
|
||||||
|
|
||||||
CMFD_Device::CMFD_Device()
|
CMFD_Device::CMFD_Device()
|
||||||
: ch((DWORD)-1), m_pRightDevice(NULL)
|
: ch((DWORD)-1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1378,15 +1359,6 @@ CMFD_Device::~CMFD_Device()
|
|||||||
|
|
||||||
bool CMFD_Device::InitFirst()
|
bool CMFD_Device::InitFirst()
|
||||||
{
|
{
|
||||||
// Mode 4: use g_nMFD1 (640x480) for left panel; also start up the right
|
|
||||||
// device here so both displays are ready before InitSecond runs.
|
|
||||||
if (g_nTypeOfMFDs == 4) {
|
|
||||||
m_pRightDevice = &mfd_device_right;
|
|
||||||
CHSH_Device::InitFirst(g_nMFD1, 640, 480); // left device
|
|
||||||
mfd_device_right.InitFirst(); // right device display mode
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
m_pRightDevice = NULL;
|
|
||||||
return CHSH_Device::InitFirst(g_nDualHead,1280,480);
|
return CHSH_Device::InitFirst(g_nDualHead,1280,480);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1394,12 +1366,12 @@ bool CMFD_Device::InitSecond()
|
|||||||
{
|
{
|
||||||
CHSH_Device::InitSecond(1024,512); // 640 x 480
|
CHSH_Device::InitSecond(1024,512); // 640 x 480
|
||||||
if(g_f3dtarget){
|
if(g_f3dtarget){
|
||||||
pDDSMechTexture=CreatePixelFormatTexture(pDD,128,128,&DDPF_R5G6B5);//Texture for storing 3D mech image...
|
pDDSMechTexture=CreatePixelFormatTexture(pDD,128,128,&DDPF_R5G6B5);//3D메크 이미지 저장하기 위한 텍스쳐...
|
||||||
}else{
|
}else{
|
||||||
// MSL 5.02 Target MFD Image
|
// MSL 5.02 Target MFD Image
|
||||||
// pDDSMechTexture=CreatePixelFormatTexture(pDD,512,512,&DDPF_R5G6B5);//texture for storing 2D mech image...
|
// pDDSMechTexture=CreatePixelFormatTexture(pDD,512,512,&DDPF_R5G6B5);//2D메크 이미지 저장하기 위한 텍스쳐...
|
||||||
pDDSMechTexture=CreatePixelFormatTexture(pDD,1024,1024,&DDPF_R5G6B5);//Texture for storing 2D mech image...
|
pDDSMechTexture=CreatePixelFormatTexture(pDD,1024,1024,&DDPF_R5G6B5);//2D메크 이미지 저장하기 위한 텍스쳐...
|
||||||
//Store images for all mechs.
|
//모든 메크의 이미지를 저장한다.
|
||||||
for(int mech=0;mech<ARRAYSIZE(mechnames);mech++){
|
for(int mech=0;mech<ARRAYSIZE(mechnames);mech++){
|
||||||
// MSL 5.02 Target MFD Image
|
// MSL 5.02 Target MFD Image
|
||||||
// int x=(mech%4)*128;
|
// int x=(mech%4)*128;
|
||||||
@@ -1415,8 +1387,8 @@ bool CMFD_Device::InitSecond()
|
|||||||
}
|
}
|
||||||
//if(pDDSMechTexture==NULL)MessageBeep(0);
|
//if(pDDSMechTexture==NULL)MessageBeep(0);
|
||||||
//pDDSMechTexture=0;
|
//pDDSMechTexture=0;
|
||||||
//pDDSDamageTexture=CreatePixelFormatTexture(pDD,512,512,&DDPF_R4G4B4A4);//damage image..
|
//pDDSDamageTexture=CreatePixelFormatTexture(pDD,512,512,&DDPF_R4G4B4A4);//데미지.. 이미지를..
|
||||||
pDDSDamageTexture=0;//On Reset: recreated... no need to create now.
|
pDDSDamageTexture=0;//Reset할때.. 새로이 만든다... 지금은 굳이 만들 필요 없다.
|
||||||
// MSL 5.03 Target Damage Display
|
// MSL 5.03 Target Damage Display
|
||||||
pDDSTargetTexture=0;
|
pDDSTargetTexture=0;
|
||||||
|
|
||||||
@@ -1437,11 +1409,6 @@ bool CMFD_Device::InitSecond()
|
|||||||
pD3DDevice->SetMaterial( &mtrl );
|
pD3DDevice->SetMaterial( &mtrl );
|
||||||
pD3DDevice->SetRenderState( D3DRENDERSTATE_AMBIENT, 0xffffffff );
|
pD3DDevice->SetRenderState( D3DRENDERSTATE_AMBIENT, 0xffffffff );
|
||||||
|
|
||||||
// Mode 4: create flip chain + D3D device for the right 640x480 monitor.
|
|
||||||
if (g_nTypeOfMFDs == 4 && m_pRightDevice) {
|
|
||||||
mfd_device_right.InitSecond();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1483,15 +1450,10 @@ bool CMFD_Device::BeginChannel(DWORD channel)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
|
||||||
// Same 7-step timing as mode 1: channels 0-4 map to sh_step 2-6.
|
|
||||||
if (sh_step != (int)(channel + 2))
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
ch=channel;
|
ch=channel;
|
||||||
|
|
||||||
//Set the Render Target.
|
//Render Target을 설정한다.
|
||||||
SetRenderTargetTexture();
|
SetRenderTargetTexture();
|
||||||
pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET ,0,0,0);
|
pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET ,0,0,0);
|
||||||
pD3DDevice->BeginScene();
|
pD3DDevice->BeginScene();
|
||||||
@@ -1513,42 +1475,8 @@ bool CMFD_Device::EndChannel()
|
|||||||
gCaptureScreen = 0;
|
gCaptureScreen = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mode 4: route this channel's blit to the correct physical monitor.
|
SetRenderTargetBackbuffer();
|
||||||
// Handled here, before the modes 1-3 SetRenderTargetBackbuffer/BeginScene
|
pD3DDevice->BeginScene();
|
||||||
// block, so each path has exactly one matched Begin/EndScene pair.
|
|
||||||
// Channels 0-2 go to the LEFT device (this, g_nMFD1).
|
|
||||||
// Channels 3-4 go to the RIGHT device (m_pRightDevice, g_nMFD2).
|
|
||||||
// pDDSTarget was created by this device's pDD; both devices are on the
|
|
||||||
// same GPU so VRAM textures are mutually accessible.
|
|
||||||
if (g_nTypeOfMFDs == 4 && m_pRightDevice) {
|
|
||||||
CHSH_Device* target = (ch >= 3) ? m_pRightDevice : static_cast<CHSH_Device*>(this);
|
|
||||||
target->SetRenderTargetBackbuffer();
|
|
||||||
target->pD3DDevice->BeginScene();
|
|
||||||
|
|
||||||
target->pD3DDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE,TRUE);
|
|
||||||
target->pD3DDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND,D3DBLEND_ONE);
|
|
||||||
target->pD3DDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND,D3DBLEND_ONE);
|
|
||||||
|
|
||||||
target->pD3DDevice->SetTexture(0, pDDSTarget);
|
|
||||||
|
|
||||||
DWORD color4 = channel_color[ch];
|
|
||||||
float w4 = (float)target->size_back.cx; // 640
|
|
||||||
float h4 = (float)target->size_back.cy; // 480
|
|
||||||
float w2_4 = (float)size_target.cx; // 1024
|
|
||||||
float h2_4 = (float)size_target.cy; // 512
|
|
||||||
D3DTLVERTEX V4[4];
|
|
||||||
V4[0]=D3DTLVERTEX(D3DVECTOR( -0.5f,h4-0.5f,0.9f),1.0f,color4,0, 0/w2_4,h4/h2_4);
|
|
||||||
V4[1]=D3DTLVERTEX(D3DVECTOR( -0.5f, -0.5f,0.9f),1.0f,color4,0, 0/w2_4, 0/h2_4);
|
|
||||||
V4[2]=D3DTLVERTEX(D3DVECTOR(w4-0.5f,h4-0.5f,0.9f),1.0f,color4,0,w4/w2_4,h4/h2_4);
|
|
||||||
V4[3]=D3DTLVERTEX(D3DVECTOR(w4-0.5f, -0.5f,0.9f),1.0f,color4,0,w4/w2_4, 0/h2_4);
|
|
||||||
target->pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,D3DFVF_TLVERTEX,V4,4,NULL);
|
|
||||||
|
|
||||||
target->pD3DDevice->EndScene();
|
|
||||||
ch = (DWORD)-1;
|
|
||||||
} else {
|
|
||||||
// Modes 1-3: blit to half of the single 1280-wide (or 640-wide) backbuffer.
|
|
||||||
SetRenderTargetBackbuffer();
|
|
||||||
pD3DDevice->BeginScene();
|
|
||||||
|
|
||||||
pD3DDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE,TRUE);
|
pD3DDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE,TRUE);
|
||||||
pD3DDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND,D3DBLEND_ONE);
|
pD3DDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND,D3DBLEND_ONE);
|
||||||
@@ -1562,7 +1490,7 @@ bool CMFD_Device::EndChannel()
|
|||||||
//color = 0xFFFFFFFF;
|
//color = 0xFFFFFFFF;
|
||||||
D3DTLVERTEX Vertices[4]; // Vertices for the cube
|
D3DTLVERTEX Vertices[4]; // Vertices for the cube
|
||||||
|
|
||||||
float w=(float)size_back.cx/2;//<==NOTE: this differs from radar.
|
float w=(float)size_back.cx/2;//<==주의: 이점이 radar와 다른점이다.
|
||||||
float x1=(ch/3)*w;
|
float x1=(ch/3)*w;
|
||||||
float x2=x1+w;
|
float x2=x1+w;
|
||||||
float h=(float)size_back.cy;
|
float h=(float)size_back.cy;
|
||||||
@@ -1576,27 +1504,13 @@ bool CMFD_Device::EndChannel()
|
|||||||
|
|
||||||
pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX , Vertices, 4, NULL );
|
pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX , Vertices, 4, NULL );
|
||||||
|
|
||||||
pD3DDevice->EndScene();
|
pD3DDevice->EndScene();
|
||||||
ch = (DWORD)-1;
|
ch = (DWORD)-1;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Mode 4: same grid pattern as rcs640 but offset to x=0 for a standalone
|
|
||||||
// 640x480 surface (left half of rcs1280).
|
|
||||||
static RECT rcs640_solo[8]={
|
|
||||||
{0,40,640,42},
|
|
||||||
{ 160-1,0, 160+1,40},
|
|
||||||
{ 320-1,0, 320+1,40},
|
|
||||||
{ 480-1,0, 480+1,40},
|
|
||||||
{0,480-42,640,480-40},
|
|
||||||
{ 160-1,440, 160+1,480},
|
|
||||||
{ 320-1,440, 320+1,480},
|
|
||||||
{ 480-1,440, 480+1,480},
|
|
||||||
};
|
|
||||||
|
|
||||||
bool CMFD_Device::BeginScene()
|
bool CMFD_Device::BeginScene()
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -1619,21 +1533,10 @@ bool CMFD_Device::BeginScene()
|
|||||||
pD3DDevice->Clear(1,&s_rc2,D3DCLEAR_TARGET ,0,1.0f,0);
|
pD3DDevice->Clear(1,&s_rc2,D3DCLEAR_TARGET ,0,1.0f,0);
|
||||||
//pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET ,0,1.0f,0);
|
//pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET ,0,1.0f,0);
|
||||||
}break;
|
}break;
|
||||||
case 4:
|
|
||||||
// Clear and draw background grid on the LEFT device only.
|
|
||||||
// The right device is cleared/gridded in BeginSceneRight(),
|
|
||||||
// called from WinMain at old sh_step==1 (one frame after the
|
|
||||||
// right MFD flip) so its back buffer has fresh content when flipped.
|
|
||||||
SetRenderTargetBackbuffer();
|
|
||||||
pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,0,1.0f,0);
|
|
||||||
pD3DDevice->BeginScene();
|
|
||||||
if(sh_game_started) DrawMFDBackGrid();
|
|
||||||
pD3DDevice->EndScene();
|
|
||||||
return true; // skip the common BeginScene/DrawGrid/EndScene below
|
|
||||||
}
|
}
|
||||||
pD3DDevice->BeginScene();
|
pD3DDevice->BeginScene();
|
||||||
if(sh_game_started) {
|
if(sh_game_started) {
|
||||||
//Draw background only when game has started..
|
//게임이 시작되었을때만.. 배경을 그린다.
|
||||||
DrawMFDBackGrid();
|
DrawMFDBackGrid();
|
||||||
}
|
}
|
||||||
pD3DDevice->EndScene();
|
pD3DDevice->EndScene();
|
||||||
@@ -1647,25 +1550,6 @@ bool CMFD_Device::EndScene()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mode 4: clear and draw the background grid on the right device.
|
|
||||||
// Called from WinMain at old sh_step==1, one frame after the right MFD
|
|
||||||
// flip, so channels 3-4 can render into a fresh back buffer before the
|
|
||||||
// next flip at new sh_step==1 (= old sh_step==0).
|
|
||||||
bool CMFD_Device::BeginSceneRight()
|
|
||||||
{
|
|
||||||
if (g_nTypeOfMFDs != 4 || !m_pRightDevice)
|
|
||||||
return false;
|
|
||||||
m_pRightDevice->SetRenderTargetBackbuffer();
|
|
||||||
m_pRightDevice->pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,0,1.0f,0);
|
|
||||||
m_pRightDevice->pD3DDevice->BeginScene();
|
|
||||||
if(sh_game_started) {
|
|
||||||
m_pRightDevice->pD3DDevice->SetTexture(0,0);
|
|
||||||
m_pRightDevice->DrawQuadList(8,rcs640_solo,0xFFFFFFFF);
|
|
||||||
}
|
|
||||||
m_pRightDevice->pD3DDevice->EndScene();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool CMFD_Device::Release()
|
bool CMFD_Device::Release()
|
||||||
{
|
{
|
||||||
@@ -1675,11 +1559,6 @@ bool CMFD_Device::Release()
|
|||||||
SAFE_RELEASE(pDDSDamageTexture);
|
SAFE_RELEASE(pDDSDamageTexture);
|
||||||
// MSL 5.03 Target Damage Display
|
// MSL 5.03 Target Damage Display
|
||||||
SAFE_RELEASE(pDDSTargetTexture);
|
SAFE_RELEASE(pDDSTargetTexture);
|
||||||
// Mode 4: release the right device before releasing this (left) device.
|
|
||||||
if (g_nTypeOfMFDs == 4 && m_pRightDevice) {
|
|
||||||
m_pRightDevice->Release();
|
|
||||||
m_pRightDevice = NULL;
|
|
||||||
}
|
|
||||||
CHSH_Device::Release();
|
CHSH_Device::Release();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -1775,7 +1654,7 @@ bool CMFD_Device::DrawMFDBackTextAux3(int state)
|
|||||||
POINTF &tc = mfd_text_coord[i];
|
POINTF &tc = mfd_text_coord[i];
|
||||||
if(i!=4){
|
if(i!=4){
|
||||||
pFont[2].DrawTextMultiLine(tc.x,tc.y,0XFFFFFFFF,mfd_text_weapon[i],TEXTALIGN_ORG);
|
pFont[2].DrawTextMultiLine(tc.x,tc.y,0XFFFFFFFF,mfd_text_weapon[i],TEXTALIGN_ORG);
|
||||||
}else{//display chain fire
|
}else{//chain fire 표시
|
||||||
DrawQuad((int)tc.x-80,(int)tc.y-20,(int)tc.x+80,(int)tc.y+20,0xFFFFFFFF);
|
DrawQuad((int)tc.x-80,(int)tc.y-20,(int)tc.x+80,(int)tc.y+20,0xFFFFFFFF);
|
||||||
pFont[2].DrawTextMultiLine(tc.x,tc.y,0XFF000000,mfd_text_weapon[i],TEXTALIGN_ORG);
|
pFont[2].DrawTextMultiLine(tc.x,tc.y,0XFF000000,mfd_text_weapon[i],TEXTALIGN_ORG);
|
||||||
}
|
}
|
||||||
@@ -1835,11 +1714,6 @@ bool CMFD_Device::DrawMFDBackGrid()
|
|||||||
case 2:
|
case 2:
|
||||||
DrawQuadList(8,rcs640,0xFFFFFFFF);
|
DrawQuadList(8,rcs640,0xFFFFFFFF);
|
||||||
break;
|
break;
|
||||||
case 4:
|
|
||||||
// Left device uses the left-half grid (0..640).
|
|
||||||
// Right device grid is drawn separately in BeginScene.
|
|
||||||
DrawQuadList(8,rcs640_solo,0xFFFFFFFF);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -1889,20 +1763,20 @@ enum {TEAMORDER_NONE, TEAM_MODE, FREEFORALL_MODE, TEAM_MESSAGE1, TEAM_MESSAGE2};
|
|||||||
bool CMFD_Device::DrawMFDDefaultBackAux1(int state)
|
bool CMFD_Device::DrawMFDDefaultBackAux1(int state)
|
||||||
{
|
{
|
||||||
if(state==TEAM_MODE){
|
if(state==TEAM_MODE){
|
||||||
//Show mech status.
|
//메크들의 상태를 보여준다.
|
||||||
DrawQuad(0,240-1,640,240+1,0xFFFFFFFF);
|
DrawQuad(0,240-1,640,240+1,0xFFFFFFFF);
|
||||||
DrawQuad(160-1,0,160+1,240,0xFFFFFFFF);
|
DrawQuad(160-1,0,160+1,240,0xFFFFFFFF);
|
||||||
DrawQuad(320-1,0,320+1,240,0xFFFFFFFF);
|
DrawQuad(320-1,0,320+1,240,0xFFFFFFFF);
|
||||||
DrawQuad(480-1,0,480+1,240,0xFFFFFFFF);
|
DrawQuad(480-1,0,480+1,240,0xFFFFFFFF);
|
||||||
}else if(state==FREEFORALL_MODE){
|
}else if(state==FREEFORALL_MODE){
|
||||||
DrawQuadList(8,aux1freequads,0xFFFFFFFF);
|
DrawQuadList(8,aux1freequads,0xFFFFFFFF);
|
||||||
}else if(state==TEAM_MESSAGE1){//nothing more to draw.
|
}else if(state==TEAM_MESSAGE1){//이걸로서 더이상 그릴것이 없다.
|
||||||
DrawMFDBackText(mfd_text_comm2);
|
DrawMFDBackText(mfd_text_comm2);
|
||||||
for(int i=0;i<7;i++){
|
for(int i=0;i<7;i++){
|
||||||
int y=80+i*40;
|
int y=80+i*40;
|
||||||
pFont[0].DrawText(80,(float)y,0xFFFFFFFF,&aux1_messages[i][0],0);
|
pFont[0].DrawText(80,(float)y,0xFFFFFFFF,&aux1_messages[i][0],0);
|
||||||
}
|
}
|
||||||
}else if(state==TEAM_MESSAGE2){//nothing more to draw.
|
}else if(state==TEAM_MESSAGE2){//이걸로서 더이상 그릴것이 없다.
|
||||||
DrawMFDBackText(mfd_text_comm2);
|
DrawMFDBackText(mfd_text_comm2);
|
||||||
for(int i=0;i<7;i++){
|
for(int i=0;i<7;i++){
|
||||||
int y=80+i*40;
|
int y=80+i*40;
|
||||||
@@ -2025,9 +1899,9 @@ void CHSHFont::Init(LPDIRECTDRAW7 pDD, LPDIRECT3DDEVICE7 pd3dDevice ,const char*
|
|||||||
|
|
||||||
DWORD x = 0;
|
DWORD x = 0;
|
||||||
DWORD y = 0;
|
DWORD y = 0;
|
||||||
char str[4] = {0,};//For DWORD alignment.. (originally 2 would suffice.)
|
char str[4] = {0,};//DWORD align시키기 위해서..(원래는 2를 쓰면된다.)
|
||||||
SIZE size;
|
SIZE size;
|
||||||
m_dwMaxWidth=0;//Initialize to minimum value.
|
m_dwMaxWidth=0;//최소값으로 초기화한다.
|
||||||
for( char c=32; c<127; c++ ){
|
for( char c=32; c<127; c++ ){
|
||||||
|
|
||||||
str[0] = c;
|
str[0] = c;
|
||||||
@@ -2037,11 +1911,11 @@ void CHSHFont::Init(LPDIRECTDRAW7 pDD, LPDIRECT3DDEVICE7 pd3dDevice ,const char*
|
|||||||
x = 0;
|
x = 0;
|
||||||
y += size.cy+1;
|
y += size.cy+1;
|
||||||
}
|
}
|
||||||
if(size.cx>(int)m_dwMaxWidth){//widest single character..
|
if(size.cx>(int)m_dwMaxWidth){//문자 하나중 가장 큰것..
|
||||||
m_dwMaxWidth=size.cx;
|
m_dwMaxWidth=size.cx;
|
||||||
}
|
}
|
||||||
|
|
||||||
//j invades the region of i. Take appropriate action...
|
//j가 i의 영역을 침범한다. 적절한 조치를 취할것...
|
||||||
ExtTextOut( hDC, x+0, y+0, ETO_OPAQUE, NULL, str, 1, NULL );
|
ExtTextOut( hDC, x+0, y+0, ETO_OPAQUE, NULL, str, 1, NULL );
|
||||||
|
|
||||||
m_fTexCoords[c-32][0] = ((float)(x+0))/m_dwTexWidth;
|
m_fTexCoords[c-32][0] = ((float)(x+0))/m_dwTexWidth;
|
||||||
@@ -2073,7 +1947,7 @@ void CHSHFont::Init(LPDIRECTDRAW7 pDD, LPDIRECT3DDEVICE7 pd3dDevice ,const char*
|
|||||||
DeleteDC( hDC );
|
DeleteDC( hDC );
|
||||||
DeleteObject( hFont );
|
DeleteObject( hFont );
|
||||||
|
|
||||||
//////StateBlock related..
|
//////StateBlock관련..
|
||||||
for( UINT which=0; which<2; which++ ){
|
for( UINT which=0; which<2; which++ ){
|
||||||
m_pd3dDevice->BeginStateBlock();
|
m_pd3dDevice->BeginStateBlock();
|
||||||
m_pd3dDevice->SetTexture( 0, m_pTexture );
|
m_pd3dDevice->SetTexture( 0, m_pTexture );
|
||||||
@@ -2114,9 +1988,9 @@ void CHSHFont::Init(LPDIRECTDRAW7 pDD, LPDIRECT3DDEVICE7 pd3dDevice ,const char*
|
|||||||
|
|
||||||
DWORD x = 0;
|
DWORD x = 0;
|
||||||
DWORD y = 0;
|
DWORD y = 0;
|
||||||
char str[4] = {0,};//For DWORD alignment.. (originally 2 would suffice.)
|
char str[4] = {0,};//DWORD align시키기 위해서..(원래는 2를 쓰면된다.)
|
||||||
SIZE size;
|
SIZE size;
|
||||||
m_dwMaxWidth=0;//Initialize to minimum value.
|
m_dwMaxWidth=0;//최소값으로 초기화한다.
|
||||||
for( char c=32; c<127; c++ ){
|
for( char c=32; c<127; c++ ){
|
||||||
|
|
||||||
str[0] = c;
|
str[0] = c;
|
||||||
@@ -2126,11 +2000,11 @@ void CHSHFont::Init(LPDIRECTDRAW7 pDD, LPDIRECT3DDEVICE7 pd3dDevice ,const char*
|
|||||||
x = 0;
|
x = 0;
|
||||||
y += size.cy+1;
|
y += size.cy+1;
|
||||||
}
|
}
|
||||||
if(size.cx>(int)m_dwMaxWidth){//widest single character..
|
if(size.cx>(int)m_dwMaxWidth){//문자 하나중 가장 큰것..
|
||||||
m_dwMaxWidth=size.cx;
|
m_dwMaxWidth=size.cx;
|
||||||
}
|
}
|
||||||
|
|
||||||
//j invades the region of i. Take appropriate action...
|
//j가 i의 영역을 침범한다. 적절한 조치를 취할것...
|
||||||
ExtTextOut( hDC, x+0, y+0, ETO_OPAQUE, NULL, str, 1, NULL );
|
ExtTextOut( hDC, x+0, y+0, ETO_OPAQUE, NULL, str, 1, NULL );
|
||||||
|
|
||||||
m_fTexCoords[c-32][0] = ((float)(x+0))/m_dwTexWidth;
|
m_fTexCoords[c-32][0] = ((float)(x+0))/m_dwTexWidth;
|
||||||
@@ -2161,7 +2035,7 @@ void CHSHFont::Init(LPDIRECTDRAW7 pDD, LPDIRECT3DDEVICE7 pd3dDevice ,const char*
|
|||||||
DeleteDC( hDC );
|
DeleteDC( hDC );
|
||||||
DeleteObject( hFont );
|
DeleteObject( hFont );
|
||||||
|
|
||||||
//////StateBlock related..
|
//////StateBlock관련..
|
||||||
for( UINT which=0; which<2; which++ ){
|
for( UINT which=0; which<2; which++ ){
|
||||||
m_pd3dDevice->BeginStateBlock();
|
m_pd3dDevice->BeginStateBlock();
|
||||||
m_pd3dDevice->SetTexture( 0, m_pTexture );
|
m_pd3dDevice->SetTexture( 0, m_pTexture );
|
||||||
@@ -2191,7 +2065,7 @@ void CHSHFont::Cleanup()
|
|||||||
}
|
}
|
||||||
SAFE_RELEASE( m_pTexture );
|
SAFE_RELEASE( m_pTexture );
|
||||||
SAFE_RELEASE( m_pd3dDevice );
|
SAFE_RELEASE( m_pd3dDevice );
|
||||||
}//If m_pd3dDevice==NULL, do nothing.
|
}//m_pd3dDevice==NULL이면 아무것도 하지 않는다.
|
||||||
|
|
||||||
}
|
}
|
||||||
HRESULT CHSHFont::GetTextExtent(const char* strText, SIZE* pSize )
|
HRESULT CHSHFont::GetTextExtent(const char* strText, SIZE* pSize )
|
||||||
@@ -2240,12 +2114,12 @@ HRESULT CHSHFont::DrawText( float sx, float sy, DWORD dwColor,const char* strTex
|
|||||||
DWORD dwNumVtx = 0;
|
DWORD dwNumVtx = 0;
|
||||||
D3DTLVERTEX * pVertices =m_pVB;
|
D3DTLVERTEX * pVertices =m_pVB;
|
||||||
char c;
|
char c;
|
||||||
float osx=sx;//original sx;
|
float osx=sx;//원래의 sx;
|
||||||
float h = (m_fTexCoords[0][3]-m_fTexCoords[0][1]) * m_dwTexHeight ;//Height of each character should all be the same.
|
float h = (m_fTexCoords[0][3]-m_fTexCoords[0][1]) * m_dwTexHeight ;//한글자의 높이는 모두 동일할 것이다.
|
||||||
|
|
||||||
while( (c = *strText++)!=0 ){
|
while( (c = *strText++)!=0 ){
|
||||||
|
|
||||||
if( c == '\n')sy+=h,sx=osx;//when displaying multiple lines...
|
if( c == '\n')sy+=h,sx=osx;//여러줄을 표시할때...
|
||||||
|
|
||||||
if( c < ' ' )continue;
|
if( c < ' ' )continue;
|
||||||
|
|
||||||
@@ -2274,7 +2148,7 @@ HRESULT CHSHFont::DrawText( float sx, float sy, DWORD dwColor,const char* strTex
|
|||||||
sx += w;
|
sx += w;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw the remaining items.
|
//나머지 것들을 그린다.
|
||||||
if(dwNumVtx> 0 ){
|
if(dwNumVtx> 0 ){
|
||||||
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, D3DFVF_TLVERTEX ,m_pVB,dwNumVtx,0 );
|
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, D3DFVF_TLVERTEX ,m_pVB,dwNumVtx,0 );
|
||||||
}
|
}
|
||||||
@@ -2342,7 +2216,7 @@ HRESULT CHSHFont::DrawTextMultiLine( float sx, float sy, DWORD dwColor,const cha
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
char string[128];//Max length set arbitrarily.
|
char string[128];//최대값을 임의로 정한다.
|
||||||
strcpy(string,strText);
|
strcpy(string,strText);
|
||||||
char * seps="\n";
|
char * seps="\n";
|
||||||
char * token;
|
char * token;
|
||||||
@@ -2377,7 +2251,7 @@ HRESULT CHSHFont::DrawTextVerticalOrg( float sx, float sy, DWORD dwColor,const c
|
|||||||
float h = (float)((m_fTexCoords[0][3]-m_fTexCoords[0][1])*m_dwTexHeight);
|
float h = (float)((m_fTexCoords[0][3]-m_fTexCoords[0][1])*m_dwTexHeight);
|
||||||
float w = (float)m_dwMaxWidth;
|
float w = (float)m_dwMaxWidth;
|
||||||
|
|
||||||
//Name assuming horizontal (left-to-right) text layout.
|
//가로 쓰기라고 가정했을때의 명칭이다.
|
||||||
int col_count=0;//maximum column count
|
int col_count=0;//maximum column count
|
||||||
int row_count=1;
|
int row_count=1;
|
||||||
|
|
||||||
@@ -2395,7 +2269,7 @@ HRESULT CHSHFont::DrawTextVerticalOrg( float sx, float sy, DWORD dwColor,const c
|
|||||||
ccount++;
|
ccount++;
|
||||||
if(ccount>col_count)col_count=ccount;//update the max value
|
if(ccount>col_count)col_count=ccount;//update the max value
|
||||||
}
|
}
|
||||||
//This is the size when writing from scratch.
|
//여기서는 새로 쓰기일때의 크기이다.
|
||||||
SIZE size;
|
SIZE size;
|
||||||
size.cx=(int)(row_count*w);
|
size.cx=(int)(row_count*w);
|
||||||
size.cy=(int)(col_count*h);
|
size.cy=(int)(col_count*h);
|
||||||
@@ -2408,7 +2282,7 @@ HRESULT CHSHFont::DrawTextVerticalOrg( float sx, float sy, DWORD dwColor,const c
|
|||||||
m_pd3dDevice->ApplyStateBlock( m_dwDrawTextStateBlock );
|
m_pd3dDevice->ApplyStateBlock( m_dwDrawTextStateBlock );
|
||||||
m_pd3dDevice->SetTexture(0,m_pTexture);
|
m_pd3dDevice->SetTexture(0,m_pTexture);
|
||||||
|
|
||||||
char string[128];//Max length set arbitrarily.
|
char string[128];//최대값을 임의로 정한다.
|
||||||
strcpy(string,strText);
|
strcpy(string,strText);
|
||||||
char * seps="\n";
|
char * seps="\n";
|
||||||
char * token;
|
char * token;
|
||||||
@@ -2416,7 +2290,7 @@ HRESULT CHSHFont::DrawTextVerticalOrg( float sx, float sy, DWORD dwColor,const c
|
|||||||
DWORD dwNumVtx = 0;
|
DWORD dwNumVtx = 0;
|
||||||
D3DTLVERTEX * pVertices =m_pVB;
|
D3DTLVERTEX * pVertices =m_pVB;
|
||||||
|
|
||||||
float osy=sy-size.cy/2;//original sy: topmost coordinate..;
|
float osy=sy-size.cy/2;//원래의 sy 가장 높은 좌표..;
|
||||||
sx=sx-size.cx/2;
|
sx=sx-size.cx/2;
|
||||||
|
|
||||||
|
|
||||||
@@ -2456,7 +2330,7 @@ HRESULT CHSHFont::DrawTextVerticalOrg( float sx, float sy, DWORD dwColor,const c
|
|||||||
token = strtok( NULL, seps );
|
token = strtok( NULL, seps );
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw the remaining items.
|
//나머지 것들을 그린다.
|
||||||
if(dwNumVtx> 0 ){
|
if(dwNumVtx> 0 ){
|
||||||
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, D3DFVF_TLVERTEX ,m_pVB,dwNumVtx,0 );
|
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, D3DFVF_TLVERTEX ,m_pVB,dwNumVtx,0 );
|
||||||
}
|
}
|
||||||
@@ -2506,20 +2380,20 @@ int __cdecl CopyTargetImage(int stage,LPDIRECTDRAWSURFACE7 tex,int step)
|
|||||||
if(stage==1){
|
if(stage==1){
|
||||||
if(inited){
|
if(inited){
|
||||||
//normal function
|
//normal function
|
||||||
//Placed at the top for performance reasons..
|
//성능상의 이유로.. 맨처음에 두었음..
|
||||||
RECT rc={0,0,128,128};
|
RECT rc={0,0,128,128};
|
||||||
LONG lPitch;
|
LONG lPitch;
|
||||||
LPDWORD agp_org,agp,pci_org,pci,mem;
|
LPDWORD agp_org,agp,pci_org,pci,mem;
|
||||||
int x,y;
|
int x,y;
|
||||||
int sx=0,sy=10,ex=120,ey=112;
|
int sx=0,sy=10,ex=120,ey=112;
|
||||||
//int hy=ey-sy;//height.
|
//int hy=ey-sy;//높이.
|
||||||
// if(1<=sh_step&&sh_step<=3){
|
// if(1<=sh_step&&sh_step<=3){
|
||||||
//1. AGP->MEM
|
//1. AGP->MEM
|
||||||
//int h=(sh_step-1)*hy/3;//segment offset..
|
//int h=(sh_step-1)*hy/3;//세그먼트 오프셋..
|
||||||
mem=mem_org;
|
mem=mem_org;
|
||||||
agp_org=(DWORD*)GetSurfacePointer(SH_TargetBufferSurface,rc,lPitch,DDLOCK_READONLY );
|
agp_org=(DWORD*)GetSurfacePointer(SH_TargetBufferSurface,rc,lPitch,DDLOCK_READONLY );
|
||||||
if(agp_org!=NULL){
|
if(agp_org!=NULL){
|
||||||
if(lPitch%4==0){// execute only when DWORD aligned.
|
if(lPitch%4==0){// DWORD align됐을때만 실행한다.
|
||||||
for(y=sy;y<ey;y++){
|
for(y=sy;y<ey;y++){
|
||||||
agp=agp_org+lPitch/4*y;
|
agp=agp_org+lPitch/4*y;
|
||||||
mem=mem_org+128*2/4*y;
|
mem=mem_org+128*2/4*y;
|
||||||
@@ -2552,7 +2426,7 @@ int __cdecl CopyTargetImage(int stage,LPDIRECTDRAWSURFACE7 tex,int step)
|
|||||||
mem=mem_org;
|
mem=mem_org;
|
||||||
pci_org=(DWORD*)GetSurfacePointer(texture,rc,lPitch,DDLOCK_WRITEONLY );
|
pci_org=(DWORD*)GetSurfacePointer(texture,rc,lPitch,DDLOCK_WRITEONLY );
|
||||||
if(pci_org){
|
if(pci_org){
|
||||||
if(lPitch%4==0){// execute only when DWORD aligned.
|
if(lPitch%4==0){// DWORD align됐을때만 실행한다.
|
||||||
for(y=sy;y<ey;y++){
|
for(y=sy;y<ey;y++){
|
||||||
pci=pci_org+lPitch/4*y;
|
pci=pci_org+lPitch/4*y;
|
||||||
mem=mem_org+128*2/4*y;
|
mem=mem_org+128*2/4*y;
|
||||||
@@ -2593,16 +2467,16 @@ int __cdecl CopyTargetImage(int stage,LPDIRECTDRAWSURFACE7 tex,int step)
|
|||||||
// Full Screen
|
// Full Screen
|
||||||
//_____________________________________________________________________________________________________
|
//_____________________________________________________________________________________________________
|
||||||
|
|
||||||
//Previously served a role similar to SCREENS
|
//전에 SCREENS와 유사한 역할을 한다
|
||||||
//Set by command line parameter and does not change thereafter.
|
//command line paramemer에 의해 정해지고 이후에는 변하지 않는다.
|
||||||
bool use_multimonitor;
|
bool use_multimonitor;
|
||||||
|
|
||||||
//Normally true.. but becomes false when entering windowed mode..
|
//보통 true이다.. 그러나 window모드로 들어가면.. false가된다.
|
||||||
//If true.. runs all drawing routines; if false, does nothing.
|
//true이면.. 각종 드로딩 루틴을 그리고 false를 일때는 일체 하지 않는다.
|
||||||
bool draw_mfd_huds;
|
bool draw_mfd_huds;
|
||||||
|
|
||||||
//Force to true when windowed mode is entered. (currently..)
|
//window모드가 되었을때 무조건 true가 되도록한다.(현재에는..)
|
||||||
//Unrelated to multi-monitor drawing.
|
//멀티모디터 드로잉과는 관계없다.
|
||||||
bool draw_main_huds;
|
bool draw_main_huds;
|
||||||
CRadar_Device radar_device;
|
CRadar_Device radar_device;
|
||||||
CMFD_Device mfd_device;
|
CMFD_Device mfd_device;
|
||||||
@@ -2615,9 +2489,6 @@ bool IsMultimonitorAvaliable()
|
|||||||
if ((*g_pfnCTCL_GetType)()==_ECTCL_CameraShip)
|
if ((*g_pfnCTCL_GetType)()==_ECTCL_CameraShip)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Mode 4 uses its own device slots ? g_nDualHead is not required.
|
|
||||||
if (g_nTypeOfMFDs == 4)
|
|
||||||
return (g_nMFD1 != -1 && g_nMFD2 != -1);
|
|
||||||
if (g_nDualHead != -1) {
|
if (g_nDualHead != -1) {
|
||||||
// 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual)
|
// 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual)
|
||||||
switch(g_nTypeOfMFDs)
|
switch(g_nTypeOfMFDs)
|
||||||
@@ -2719,7 +2590,7 @@ void __cdecl DrawSwrling(LPDIRECT3DDEVICE7 pd3dDevice,LPDIRECTDRAWSURFACE7 pText
|
|||||||
const int segvert=(seg+1)*2;
|
const int segvert=(seg+1)*2;
|
||||||
static D3DTLVERTEX Vertices[seg2][segvert]; // Vertices for the cube
|
static D3DTLVERTEX Vertices[seg2][segvert]; // Vertices for the cube
|
||||||
static bool vertices_initialized=false;
|
static bool vertices_initialized=false;
|
||||||
//int rcount,scount;//num rotation-direction segments, num straight-direction segments..
|
//int rcount,scount;//회전 방향 setment수.., 직선 방향 segment수..
|
||||||
static float off_z=0;
|
static float off_z=0;
|
||||||
if(freload){
|
if(freload){
|
||||||
char temppath[MAX_PATH];
|
char temppath[MAX_PATH];
|
||||||
@@ -2745,7 +2616,7 @@ void __cdecl DrawSwrling(LPDIRECT3DDEVICE7 pd3dDevice,LPDIRECTDRAWSURFACE7 pText
|
|||||||
MakeTorus(Vertices[2],w/2,h/2, 0*f,100*f,seg,0xFF000000,0xFF666666,0.3f,0.5f,0,-500,0,-200);
|
MakeTorus(Vertices[2],w/2,h/2, 0*f,100*f,seg,0xFF000000,0xFF666666,0.3f,0.5f,0,-500,0,-200);
|
||||||
vertices_initialized=true;
|
vertices_initialized=true;
|
||||||
}else{
|
}else{
|
||||||
//If initialized, keep changing texture coordinates.
|
//초기화 됐을경우는 텍스쳐 좌표를 계속해서 바꾼다.
|
||||||
static float offset=0;
|
static float offset=0;
|
||||||
static float off=0;
|
static float off=0;
|
||||||
float bb=sinf(off)*2;
|
float bb=sinf(off)*2;
|
||||||
@@ -2774,7 +2645,7 @@ void __cdecl DrawGameEndScreen(LPDIRECT3DDEVICE7 pd3dDevice,LPDIRECTDRAWSURFACE7
|
|||||||
{
|
{
|
||||||
static D3DTLVERTEX Vertices[4]; // Vertices for the cube
|
static D3DTLVERTEX Vertices[4]; // Vertices for the cube
|
||||||
static bool vertices_initialized=false;
|
static bool vertices_initialized=false;
|
||||||
//int rcount,scount;//num rotation-direction segments, num straight-direction segments..
|
//int rcount,scount;//회전 방향 setment수.., 직선 방향 segment수..
|
||||||
static float off_z=0;
|
static float off_z=0;
|
||||||
if(freload){
|
if(freload){
|
||||||
extern bool g_bCOOP; // COin OPeration
|
extern bool g_bCOOP; // COin OPeration
|
||||||
@@ -2805,7 +2676,7 @@ void __cdecl DrawGameEndScreen(LPDIRECT3DDEVICE7 pd3dDevice,LPDIRECTDRAWSURFACE7
|
|||||||
Vertices[3] = D3DTLVERTEX(D3DVECTOR( (float)w, (float)h, z_pos),1.0f,0xFFFFFFFF,0, 800.0f/1024.0f, 600.0f/1024.0f );
|
Vertices[3] = D3DTLVERTEX(D3DVECTOR( (float)w, (float)h, z_pos),1.0f,0xFFFFFFFF,0, 800.0f/1024.0f, 600.0f/1024.0f );
|
||||||
vertices_initialized=true;
|
vertices_initialized=true;
|
||||||
}else{
|
}else{
|
||||||
//If initialized, keep changing texture coordinates.
|
//초기화 됐을경우는 텍스쳐 좌표를 계속해서 바꾼다.
|
||||||
}
|
}
|
||||||
pd3dDevice->SetTextureStageState(0,D3DTSS_COLOROP ,D3DTOP_MODULATE);
|
pd3dDevice->SetTextureStageState(0,D3DTSS_COLOROP ,D3DTOP_MODULATE);
|
||||||
pd3dDevice->SetTextureStageState(0,D3DTSS_COLORARG1 ,D3DTA_TEXTURE);
|
pd3dDevice->SetTextureStageState(0,D3DTSS_COLORARG1 ,D3DTA_TEXTURE);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
//D3DCOLOR_XXXX macros are defined in d3d8types.h and will not be redefined here.
|
//D3DCOLOR_XXXX정위한다.(d3d8types.h에 정의되어 있으므로. 정의되어있지 않을것이다.
|
||||||
#ifndef D3DCOLOR_ARGB
|
#ifndef D3DCOLOR_ARGB
|
||||||
|
|
||||||
#define D3DCOLOR_ARGB(a,r,g,b) (D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
|
#define D3DCOLOR_ARGB(a,r,g,b) (D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
|
||||||
@@ -44,10 +44,10 @@ enum AUX1STATE
|
|||||||
#define AUX1_TEAM_MESSAGE 2
|
#define AUX1_TEAM_MESSAGE 2
|
||||||
#define AUX1_FREE_MESSAGE 3
|
#define AUX1_FREE_MESSAGE 3
|
||||||
|
|
||||||
//Create one instance per device per font type (typeface, size, bold, italic).
|
//각 디바이스마다.., 각 폰트 종류(typeface,크기,굴기,기울기)가 달라질때 마다 하나씩 생성시켜 사용하면 된다.
|
||||||
class CHSHFont
|
class CHSHFont
|
||||||
{
|
{
|
||||||
//Used temporarily; no need per instance, so declared static.
|
//일시적으로 사용되고.. 각 instance마다 사용되어질 필요가 없으므로 static으로 하였다.
|
||||||
static D3DTLVERTEX m_pVB[300];
|
static D3DTLVERTEX m_pVB[300];
|
||||||
|
|
||||||
LPDIRECT3DDEVICE7 m_pd3dDevice;
|
LPDIRECT3DDEVICE7 m_pd3dDevice;
|
||||||
@@ -59,7 +59,7 @@ class CHSHFont
|
|||||||
DWORD m_dwSavedStateBlock;
|
DWORD m_dwSavedStateBlock;
|
||||||
DWORD m_dwDrawTextStateBlock;
|
DWORD m_dwDrawTextStateBlock;
|
||||||
|
|
||||||
DWORD m_dwMaxWidth;//Width of the widest single character..
|
DWORD m_dwMaxWidth;//문자 하나중 가장 큰것..
|
||||||
public:
|
public:
|
||||||
CHSHFont();
|
CHSHFont();
|
||||||
~CHSHFont();
|
~CHSHFont();
|
||||||
@@ -80,10 +80,10 @@ public:
|
|||||||
CHSH_Device* m_pOtherHSHD;
|
CHSH_Device* m_pOtherHSHD;
|
||||||
public:
|
public:
|
||||||
LPDIRECTDRAW7 pDD;
|
LPDIRECTDRAW7 pDD;
|
||||||
LPDIRECTDRAWSURFACE7 pDDSFront; //Required for Flip..
|
LPDIRECTDRAWSURFACE7 pDDSFront; //Flip을 하기위해서 필요..
|
||||||
LPDIRECTDRAWSURFACE7 pDDSBack; //Required for Drawing.
|
LPDIRECTDRAWSURFACE7 pDDSBack; //Drawing하기 위해서 필요.
|
||||||
LPDIRECTDRAWSURFACE7 pDDSTarget; //The actual rendering texture.
|
LPDIRECTDRAWSURFACE7 pDDSTarget; //실제 그리는 텍스쳐 이다.
|
||||||
LPDIRECTDRAWSURFACE7 pDDSTexture; //The actual rendering texture.
|
LPDIRECTDRAWSURFACE7 pDDSTexture; //실제 그리는 텍스쳐 이다.
|
||||||
LPDIRECT3DDEVICE7 pD3DDevice;
|
LPDIRECT3DDEVICE7 pD3DDevice;
|
||||||
CHSHFont pFont[4];
|
CHSHFont pFont[4];
|
||||||
SIZE size_back;
|
SIZE size_back;
|
||||||
@@ -141,7 +141,7 @@ public:
|
|||||||
bool InitFirst();
|
bool InitFirst();
|
||||||
bool InitSecond();
|
bool InitSecond();
|
||||||
LPDIRECTDRAWSURFACE7 pDDSBackground; //one attatched image sruface
|
LPDIRECTDRAWSURFACE7 pDDSBackground; //one attatched image sruface
|
||||||
LPDIRECTDRAWSURFACE7 pDDSRadarDamageTexture;//Mech damage texture..
|
LPDIRECTDRAWSURFACE7 pDDSRadarDamageTexture;//메크 데미지 텍스쳐..
|
||||||
// MSL 5.03 Mechview
|
// MSL 5.03 Mechview
|
||||||
LPDIRECTDRAWSURFACE7 pDDSMechViewBkgnd;
|
LPDIRECTDRAWSURFACE7 pDDSMechViewBkgnd;
|
||||||
LPDIRECTDRAWSURFACE7 pDDSMechViewBeagle;
|
LPDIRECTDRAWSURFACE7 pDDSMechViewBeagle;
|
||||||
@@ -151,7 +151,7 @@ public:
|
|||||||
LPDIRECTDRAWSURFACE7 pDDSMechViewLightamp;
|
LPDIRECTDRAWSURFACE7 pDDSMechViewLightamp;
|
||||||
LPDIRECTDRAWSURFACE7 m_pDDSMechView; //m x n - tiled 3D MechView images
|
LPDIRECTDRAWSURFACE7 m_pDDSMechView; //m x n - tiled 3D MechView images
|
||||||
|
|
||||||
virtual bool BeginScene(); //Rotates and outputs texture; pre-renders background image...
|
virtual bool BeginScene(); //texture를 ratate시켜서 출력하기 위한 루틴이 포함된다.. background이미지를.. 미리 출력한다...
|
||||||
virtual bool EndScene();
|
virtual bool EndScene();
|
||||||
virtual bool Release();
|
virtual bool Release();
|
||||||
bool LoadRadarDamageTexture(const char *mechtexturename);
|
bool LoadRadarDamageTexture(const char *mechtexturename);
|
||||||
@@ -163,23 +163,21 @@ class CMFD_Device:public CHSH_Device
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//CHSHFont SmallFont;
|
//CHSHFont SmallFont;
|
||||||
LPDIRECTDRAWSURFACE7 pDDSMechTexture;//Texture for storing 3D mech image...
|
LPDIRECTDRAWSURFACE7 pDDSMechTexture;//3D메크 이미지 저장하기 위한 텍스쳐...
|
||||||
LPDIRECTDRAWSURFACE7 pDDSDamageTexture;//Mech damage texture..
|
LPDIRECTDRAWSURFACE7 pDDSDamageTexture;//메크 데미지 텍스쳐..
|
||||||
// MSL 5.03 Target Damage Display
|
// MSL 5.03 Target Damage Display
|
||||||
LPDIRECTDRAWSURFACE7 pDDSTargetTexture;//Target damage texture..
|
LPDIRECTDRAWSURFACE7 pDDSTargetTexture;//메크 데미지 텍스쳐..
|
||||||
|
|
||||||
DWORD ch; //current channel....
|
DWORD ch; //current channel....
|
||||||
CHSH_Device* m_pRightDevice; // mode 4: pointer to right 640x480 device (NULL in modes 1-3)
|
|
||||||
public:
|
public:
|
||||||
CMFD_Device();
|
CMFD_Device();
|
||||||
~CMFD_Device();
|
~CMFD_Device();
|
||||||
bool InitFirst();
|
bool InitFirst();
|
||||||
bool InitSecond();
|
bool InitSecond();
|
||||||
bool BeginChannel(DWORD channel);// Select channel 0-4.
|
bool BeginChannel(DWORD channel);// 0~4번의 채널을 정할 수 있게된다.
|
||||||
bool EndChannel();
|
bool EndChannel();
|
||||||
virtual bool BeginScene(); //Performs normal BeginScene/EndScene.
|
virtual bool BeginScene(); //normal한 beginscene/endscene를 한다.
|
||||||
bool BeginSceneRight(); // mode 4: clear+grid on right device at sh_step==1
|
virtual bool EndScene(); //flip을 한다.
|
||||||
virtual bool EndScene(); //Performs the Flip.
|
|
||||||
virtual bool Release();
|
virtual bool Release();
|
||||||
bool LoadDamageTexture(const char *mechtexturename);
|
bool LoadDamageTexture(const char *mechtexturename);
|
||||||
// MSL 5.03 Target Damage Display
|
// MSL 5.03 Target Damage Display
|
||||||
@@ -191,19 +189,6 @@ public:
|
|||||||
bool DrawMFDDefaultBackAux1(int state);
|
bool DrawMFDDefaultBackAux1(int state);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Mode 4 (split dual 640x480): right-side MFD device on its own 640x480 monitor.
|
|
||||||
// Same GPU as the left device (mfd_device), so VRAM textures are shared.
|
|
||||||
class CMFDRight_Device : public CHSH_Device
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CMFDRight_Device() {}
|
|
||||||
bool InitFirst();
|
|
||||||
bool InitSecond();
|
|
||||||
virtual bool BeginScene() { return true; }
|
|
||||||
virtual bool EndScene() { return true; }
|
|
||||||
virtual bool Release() { return CHSH_Device::Release(); }
|
|
||||||
};
|
|
||||||
|
|
||||||
class CMR_Device:public CHSH_Device
|
class CMR_Device:public CHSH_Device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -214,10 +199,10 @@ public:
|
|||||||
bool InitFirst();
|
bool InitFirst();
|
||||||
bool InitSecond();
|
bool InitSecond();
|
||||||
LPDIRECTDRAWSURFACE7 pDDSBackground; //one attatched image sruface
|
LPDIRECTDRAWSURFACE7 pDDSBackground; //one attatched image sruface
|
||||||
LPDIRECTDRAWSURFACE7 pDDSMapTexture; //Texture for scrollable map image..
|
LPDIRECTDRAWSURFACE7 pDDSMapTexture; //스크롤되는 맵 이미지를 위한 텍스쳐..
|
||||||
LPDIRECTDRAWSURFACE7 pDDSMRTargetTexture;//Mission Review target texture..
|
LPDIRECTDRAWSURFACE7 pDDSMRTargetTexture;//메크 데미지 텍스쳐..
|
||||||
bool LoadMRTargetTexture(const char *mechtexturename);
|
bool LoadMRTargetTexture(const char *mechtexturename);
|
||||||
virtual bool BeginScene(); //Rotates and outputs texture; pre-renders background image...
|
virtual bool BeginScene(); //texture를 ratate시켜서 출력하기 위한 루틴이 포함된다.. background이미지를.. 미리 출력한다...
|
||||||
virtual bool EndScene();
|
virtual bool EndScene();
|
||||||
virtual bool Release();
|
virtual bool Release();
|
||||||
};
|
};
|
||||||
@@ -227,7 +212,6 @@ void HSH_DirectDrawRelease2();
|
|||||||
|
|
||||||
extern CRadar_Device radar_device;
|
extern CRadar_Device radar_device;
|
||||||
extern CMFD_Device mfd_device;
|
extern CMFD_Device mfd_device;
|
||||||
extern CMFDRight_Device mfd_device_right;
|
|
||||||
extern CMR_Device mr_device;
|
extern CMR_Device mr_device;
|
||||||
extern bool use_shgui;
|
extern bool use_shgui;
|
||||||
extern int sh_step;
|
extern int sh_step;
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ INTERNET_STATUS_STATE_CHANGE
|
|||||||
INTERNET_STATE_DISCONNECTED_BY_USER
|
INTERNET_STATE_DISCONNECTED_BY_USER
|
||||||
Disconnected by user request.
|
Disconnected by user request.
|
||||||
INTERNET_STATE_IDLE
|
INTERNET_STATE_IDLE
|
||||||
No network requests are being made by the Win32® Internet functions.
|
No network requests are being made by the Win32® Internet functions.
|
||||||
INTERNET_STATE_BUSY
|
INTERNET_STATE_BUSY
|
||||||
Network requests are being made by the Win32 Internet functions.
|
Network requests are being made by the Win32 Internet functions.
|
||||||
INTERNET_STATUS_USER_INPUT_REQUIRED
|
INTERNET_STATUS_USER_INPUT_REQUIRED
|
||||||
|
|||||||
@@ -1077,7 +1077,7 @@ int CStrArray::GetTotalLength() const
|
|||||||
int nTotalLength;
|
int nTotalLength;
|
||||||
int i, nSize = GetSize();
|
int i, nSize = GetSize();
|
||||||
|
|
||||||
nTotalLength = nSize; // nSize null terminators '\0'
|
nTotalLength = nSize; // nSize개의 '\0'
|
||||||
for(i = 0; i < nSize; i++) {
|
for(i = 0; i < nSize; i++) {
|
||||||
nTotalLength += strlen(GetAt(i));
|
nTotalLength += strlen(GetAt(i));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#include "recscore.h"
|
#include "recscore.h"
|
||||||
#endif // !defined(CTCLS_EXPORTS) && !defined(CTCL_LAUNCHER)
|
#endif // !defined(CTCLS_EXPORTS) && !defined(CTCL_LAUNCHER)
|
||||||
|
|
||||||
#define MAX_TESLAS 31
|
#define MAX_TESLAS 16
|
||||||
#define MAX_CAMERAS 4
|
#define MAX_CAMERAS 4
|
||||||
|
|
||||||
#define PORT_Launcher 1000
|
#define PORT_Launcher 1000
|
||||||
@@ -260,7 +260,7 @@ CInviteCOOP g_InviteCOOP;
|
|||||||
// Mech4 only
|
// Mech4 only
|
||||||
int g_nMech4Comm = 0;
|
int g_nMech4Comm = 0;
|
||||||
BOOL g_bIsServer = FALSE;
|
BOOL g_bIsServer = FALSE;
|
||||||
SPlayerInfo g_aPlayerInfos[35]; // 31 pilots + 1 CS + 3 spare
|
SPlayerInfo g_aPlayerInfos[20];
|
||||||
int g_nPlayerInfos;
|
int g_nPlayerInfos;
|
||||||
int g_nServer;
|
int g_nServer;
|
||||||
int g_nTeslas;
|
int g_nTeslas;
|
||||||
@@ -514,7 +514,7 @@ void CSOC_Server::OnSendFile()
|
|||||||
BYTE bCode;
|
BYTE bCode;
|
||||||
if (Disassemble("B", &bCode)) {
|
if (Disassemble("B", &bCode)) {
|
||||||
ASSERT((bCode == 0) || (bCode == 3));
|
ASSERT((bCode == 0) || (bCode == 3));
|
||||||
// Receiving from Game to console...
|
// 받아가시오 from Game to console...
|
||||||
SYSTEMTIME* pSysTime;
|
SYSTEMTIME* pSysTime;
|
||||||
WORD wSysTimeSize;
|
WORD wSysTimeSize;
|
||||||
GUID* pGUID;
|
GUID* pGUID;
|
||||||
@@ -530,7 +530,7 @@ void CSOC_Server::OnSendFile()
|
|||||||
pSF = g_pCTCLManager->m_SFM_Recv.Find(*pGUID, nType);
|
pSF = g_pCTCLManager->m_SFM_Recv.Find(*pGUID, nType);
|
||||||
if (pSF) {
|
if (pSF) {
|
||||||
if (bCode == 3) {
|
if (bCode == 3) {
|
||||||
// Did we receive confirmation the mission review server got the mission review?
|
// 미션리뷰 서버가 mission review 받았다는 것을 받았느냐?
|
||||||
pSF->m_bProcessed = true;
|
pSF->m_bProcessed = true;
|
||||||
g_pCTCLManager->m_SFM_Recv.Cut(pSF);
|
g_pCTCLManager->m_SFM_Recv.Cut(pSF);
|
||||||
g_pCTCLManager->m_SFM_Done.AddTail(pSF);
|
g_pCTCLManager->m_SFM_Done.AddTail(pSF);
|
||||||
@@ -907,7 +907,7 @@ void CSOC_Client::OnSendFile()
|
|||||||
BYTE bCode;
|
BYTE bCode;
|
||||||
if (Disassemble("B", &bCode)) {
|
if (Disassemble("B", &bCode)) {
|
||||||
ASSERT((bCode == 1) || (bCode == 2));
|
ASSERT((bCode == 1) || (bCode == 2));
|
||||||
// Received from console to Game...
|
// 받았오 from console to Game...
|
||||||
SYSTEMTIME* pSysTime;
|
SYSTEMTIME* pSysTime;
|
||||||
WORD wSysTimeSize;
|
WORD wSysTimeSize;
|
||||||
GUID* pGUID;
|
GUID* pGUID;
|
||||||
@@ -1425,21 +1425,21 @@ void CCTCLManager::Run()
|
|||||||
#endif // !defined(CTCL_LAUNCHER)
|
#endif // !defined(CTCL_LAUNCHER)
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
Code executed for both client and server.
|
클라이언트나 서버의 경우 실행되는 코드이다.
|
||||||
|
|
||||||
*Possible states:
|
*있을수 있는 상태들
|
||||||
Before server/client role is determined: waiting for commands
|
서버/클라이언트가 결정되기전.. 명령 대기상태
|
||||||
(Commands such as exit/start-server/start-client may arrive.)
|
(종료/서버시작/클라이언트 시작등의 명령이 올수 있다.)
|
||||||
|
|
||||||
Running as server, waiting for server mech configuration data
|
서버로 실행되어 서버 메크 설정에 대한 데이타를 기다리는 상태
|
||||||
(State after CreateSession has been called.)
|
(CreateSession가 실행된 상태이다.)
|
||||||
Running as server, waiting for Bot information
|
서버로 실행되어 Bot들에 대한 정보를 기다리는 상태
|
||||||
(Client joining happens automatically between client and server.)
|
(클라이언트의 참여는 클라이언트와 서버간에 자동으로 이루어진다.)
|
||||||
Running as server, waiting for Launch
|
서버로 실행되어 Launch를 기다리는 상태
|
||||||
|
|
||||||
==>Client has no waiting state as data is transferred immediately on startup.
|
==>클라이언트는 실행즉시 데이타들이 전달되므로 대기상태가 없다.
|
||||||
|
|
||||||
==>Define each state and implement the appropriate handling for each.
|
==>각각의 상태를 정의하고 각 상태에 맞는 처리를 해주면 된다.
|
||||||
switch(state){
|
switch(state){
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
@@ -1521,8 +1521,8 @@ void CCTCLManager::DoMech4Comm()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
//Send command to prepare for execution as server/client.
|
//서버/클라이언트로서 실행준비하도록 명령을 전달한다.
|
||||||
//Also transmit all parameters required to run the server.
|
//또한 서버를 실행하는데 필요한 모든 파라미터도 함께 전달한다.
|
||||||
for(i = 0; i < g_nPlayerInfos; i++) {
|
for(i = 0; i < g_nPlayerInfos; i++) {
|
||||||
SPlayerInfo& pi = g_aPlayerInfos[i];
|
SPlayerInfo& pi = g_aPlayerInfos[i];
|
||||||
if (!pi.m_bBot) {
|
if (!pi.m_bBot) {
|
||||||
@@ -1549,12 +1549,12 @@ void CCTCLManager::DoMech4Comm()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i == g_nPlayerInfos) {
|
if (i == g_nPlayerInfos) {
|
||||||
// Bundle and send all Bot information together.
|
// Bot들에 대한 정보를 모두 한데 묶어서 보낸다.
|
||||||
CPacket pak(&SVR.GetGameSOC());
|
CPacket pak(&SVR.GetGameSOC());
|
||||||
|
|
||||||
pak.Assemble("B", C_BOTS);
|
pak.Assemble("B", C_BOTS);
|
||||||
for(i = 0; i < g_nPlayerInfos; i++) {
|
for(i = 0; i < g_nPlayerInfos; i++) {
|
||||||
if (i != g_nServer) { // Originally bots only; now everyone except the server...
|
if (i != g_nServer) { // 원래 Bot만 지금은 서버를 제외한 전부...
|
||||||
SPlayerInfo& pi = g_aPlayerInfos[i];
|
SPlayerInfo& pi = g_aPlayerInfos[i];
|
||||||
pak.Assemble("BnsDWwsnn", pi.m_bBot, pi.m_nLevelOrTesla, pi.m_szName, pi.m_nMechIndex, pi.m_fileID, pi.m_recordID, pi.m_szMech, pi.m_nTeamOrSkin, pi.m_nDecal);
|
pak.Assemble("BnsDWwsnn", pi.m_bBot, pi.m_nLevelOrTesla, pi.m_szName, pi.m_nMechIndex, pi.m_fileID, pi.m_recordID, pi.m_szMech, pi.m_nTeamOrSkin, pi.m_nDecal);
|
||||||
}
|
}
|
||||||
@@ -1565,10 +1565,10 @@ void CCTCLManager::DoMech4Comm()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
// Once the game is successfully created, set Mech info for server and all clients...
|
// 게임이 성공적으로 만들어지면 서버와 클라이언트들의 Mech에 대한 정보들을 Set한다...
|
||||||
if (SOCGame.m_nGameReturn == _EGR_OkCreateSession) {
|
if (SOCGame.m_nGameReturn == _EGR_OkCreateSession) {
|
||||||
for(i = 0; i < g_nPlayerInfos; i++) {
|
for(i = 0; i < g_nPlayerInfos; i++) {
|
||||||
if (i != g_nServer) { // Server has already entered SetMech...
|
if (i != g_nServer) { // 서버는 이미 SetMech에 진입한 상태...
|
||||||
SPlayerInfo& pi = g_aPlayerInfos[i];
|
SPlayerInfo& pi = g_aPlayerInfos[i];
|
||||||
if (!pi.m_bBot) {
|
if (!pi.m_bBot) {
|
||||||
CTeslaInfo& ti = m_aTIs.GetAt(pi.m_nLevelOrTesla);
|
CTeslaInfo& ti = m_aTIs.GetAt(pi.m_nLevelOrTesla);
|
||||||
@@ -1581,8 +1581,8 @@ void CCTCLManager::DoMech4Comm()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
//Wait for all clients to join the server. <==This response comes from the server.
|
//모든 클라이언드들이 서버에 참여하기를 기다린다.<==이 응답은 서버로 부터 얻을 수 있다.
|
||||||
//Once all clients have joined, instruct the server to Launch the game.
|
//참여가 모두 끝났으면, 서버로 하여금 게임을 Launch시키도록 한다.
|
||||||
if (SOCGame.m_nGameReturn == _EGR_OkLaunchReady) {
|
if (SOCGame.m_nGameReturn == _EGR_OkLaunchReady) {
|
||||||
g_nMech4Comm = 9;
|
g_nMech4Comm = 9;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public:
|
|||||||
const char* m_pcsz;
|
const char* m_pcsz;
|
||||||
|
|
||||||
int m_nLauncherConnection; // 0: no connection, +1: connection, -1: connecting
|
int m_nLauncherConnection; // 0: no connection, +1: connection, -1: connecting
|
||||||
int m_nConnection2; // Connection to game or camera ship per m_bCameraShip, 0: no connection, +1: connected, -1: connecting
|
int m_nConnection2; // m_bCameraShip값에 따라 게임 혹은 카메라 쉽과의 접속을 의미, 0: no connection, +1: connection, -1: connecting
|
||||||
int m_nApplType;
|
int m_nApplType;
|
||||||
int m_nApplState;
|
int m_nApplState;
|
||||||
int m_nGameState;
|
int m_nGameState;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ int GetDayEnd(int nYear, int nMonth)
|
|||||||
|
|
||||||
long GetTotalSeconds(int nYear, int nMonth, int nDay)
|
long GetTotalSeconds(int nYear, int nMonth, int nDay)
|
||||||
{
|
{
|
||||||
// Seconds elapsed since 00:00:00 on the date nYear/nMonth/nDay...
|
// nYear, nMonth, nDay날의 0시 0분 0초를 0으로 한 초단위 수...
|
||||||
ASSERT(nYear >= 1970);
|
ASSERT(nYear >= 1970);
|
||||||
ASSERT((1 <= nMonth) && (nMonth <= 12));
|
ASSERT((1 <= nMonth) && (nMonth <= 12));
|
||||||
ASSERT(1 <= nDay);
|
ASSERT(1 <= nDay);
|
||||||
@@ -57,13 +57,13 @@ long GetTotalSeconds(int nYear, int nMonth, int nDay)
|
|||||||
if (IsLeapYear(nStart)) {
|
if (IsLeapYear(nStart)) {
|
||||||
nDays++;
|
nDays++;
|
||||||
}
|
}
|
||||||
lTotal += nDays * 24 * 60 * 60; // 24 hours * 60 min * 60 sec
|
lTotal += nDays * 24 * 60 * 60; // 24시간 60분 60초
|
||||||
}
|
}
|
||||||
for(nStart = 1; nStart < nMonth; nStart++) {
|
for(nStart = 1; nStart < nMonth; nStart++) {
|
||||||
int nDayEnd = GetDayEnd(nYear, nStart);
|
int nDayEnd = GetDayEnd(nYear, nStart);
|
||||||
lTotal += nDayEnd * 24 * 60 * 60; // 24 hours * 60 min * 60 sec
|
lTotal += nDayEnd * 24 * 60 * 60; // 24시간 60분 60초
|
||||||
}
|
}
|
||||||
lTotal += (nDay - 1) * 24 * 60 * 60; // 24 hours * 60 min * 60 sec
|
lTotal += (nDay - 1) * 24 * 60 * 60; // 24시간 60분 60초
|
||||||
|
|
||||||
return lTotal;
|
return lTotal;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class CTimeDate
|
|||||||
public:
|
public:
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
// Bit Fields declared first are at the low-bit end.
|
// Bit Field는 앞쪽에 지정된 것이 LowBit이다.
|
||||||
DWORD m_xDay: 5; // 2^0, 2^5-1
|
DWORD m_xDay: 5; // 2^0, 2^5-1
|
||||||
DWORD m_xMonth: 4; // 2^5, 2^4-1
|
DWORD m_xMonth: 4; // 2^5, 2^4-1
|
||||||
DWORD m_xYear: TIMEDATE_YEAR_BITS; // from 1900-2155 // 2^9, 2^8-1
|
DWORD m_xYear: TIMEDATE_YEAR_BITS; // from 1900-2155 // 2^9, 2^8-1
|
||||||
|
|||||||
@@ -1375,7 +1375,7 @@ void CSockAddr::SetTarget(const char* pcszAddr)
|
|||||||
{
|
{
|
||||||
if (pcszAddr) {
|
if (pcszAddr) {
|
||||||
sin_addr.s_addr = inet_addr(pcszAddr);
|
sin_addr.s_addr = inet_addr(pcszAddr);
|
||||||
if (sin_addr.s_addr == INADDR_ANY) { // 0.0.0.0, HOST/Network Addr irrelevant
|
if (sin_addr.s_addr == INADDR_ANY) { // 0.0.0.0이기 때문에 HOST/Network Addr무관
|
||||||
hostent* pHN = gethostbyname(pcszAddr);
|
hostent* pHN = gethostbyname(pcszAddr);
|
||||||
if (pHN) {
|
if (pHN) {
|
||||||
sin_addr.s_addr = *(u_long*)pHN->h_addr;
|
sin_addr.s_addr = *(u_long*)pHN->h_addr;
|
||||||
@@ -3667,7 +3667,7 @@ CSOCListen* CSOCManager::DoListen(int nPort, PFN_CreateSOCClient pfnCSC, DWORD d
|
|||||||
pSOCListen = new CSOCListen(nPort);
|
pSOCListen = new CSOCListen(nPort);
|
||||||
pSOCListen->SetCSCParam(pfnCSC, dwCSCParam1, dwCSCParam2);
|
pSOCListen->SetCSCParam(pfnCSC, dwCSCParam1, dwCSCParam2);
|
||||||
if (!DoListen(pSOCListen, nPort)) {
|
if (!DoListen(pSOCListen, nPort)) {
|
||||||
// Case of Listen on the same port twice?...
|
// 같은 포트를 2번 Listen 하는 경우?...
|
||||||
pSOCListen = NULL;
|
pSOCListen = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ extern char SERVERID[];
|
|||||||
#endif // !MAX_PACKET
|
#endif // !MAX_PACKET
|
||||||
#ifndef MAX_FTPBUF
|
#ifndef MAX_FTPBUF
|
||||||
#define MAX_FTPBUF 1024
|
#define MAX_FTPBUF 1024
|
||||||
// MAX_FTPBUF must be smaller than MAX_PACKET?
|
// MAX_FTPBUF는 MAX_PACKET보다 반드시 작아야 한다?
|
||||||
// 9+size==sizeof(bCmd) + sizeof(FTID) + sizeof(size) + size
|
// 9+size==sizeof(bCmd) + sizeof(FTID) + sizeof(size) + size
|
||||||
#endif // !MAX_FTPBUF
|
#endif // !MAX_FTPBUF
|
||||||
|
|
||||||
@@ -251,7 +251,7 @@ private:
|
|||||||
|
|
||||||
#define ESTRF_USER_START 100
|
#define ESTRF_USER_START 100
|
||||||
|
|
||||||
#define ESTRF_PASSWORDCHANGED 110 // Password changed while logged in
|
#define ESTRF_PASSWORDCHANGED 110 // 로그인하고 있는 동안에 패스워드가 바뀜
|
||||||
|
|
||||||
void Randomize();
|
void Randomize();
|
||||||
|
|
||||||
@@ -268,7 +268,7 @@ union UPacketValue
|
|||||||
|
|
||||||
class CDAPacket : public SOCBase_Class
|
class CDAPacket : public SOCBase_Class
|
||||||
{
|
{
|
||||||
// Variable parameters in the tail portion after processing the packet header...
|
// Packet의 앞 부분을 처리하고 난 뒷 부분의 가변 파라미터...
|
||||||
public:
|
public:
|
||||||
BYTE m_bCmd;
|
BYTE m_bCmd;
|
||||||
BYTE m_bReserved;
|
BYTE m_bReserved;
|
||||||
@@ -361,8 +361,8 @@ public:
|
|||||||
#define C_ROOM_MAKE 232
|
#define C_ROOM_MAKE 232
|
||||||
// s - name, s - password
|
// s - name, s - password
|
||||||
#define C_ROOM_JOIN 233
|
#define C_ROOM_JOIN 233
|
||||||
// d - number (leaving a Room = -1), s - password
|
// d - number(Room을 떠나는 것은 -1), s - password
|
||||||
#define S_ROOM_JOIN 233 // Result of C_ROOM_MAKE/C_ROOM_JOIN...
|
#define S_ROOM_JOIN 233 // C_ROOM_MAKE/C_ROOM_JOIN의 결과...
|
||||||
// b - code(CSCODE_OK or error code), d - number
|
// b - code(CSCODE_OK or error code), d - number
|
||||||
#define C_ROOM_UPDS 234 // CSCODE_... + @
|
#define C_ROOM_UPDS 234 // CSCODE_... + @
|
||||||
|
|
||||||
@@ -384,13 +384,13 @@ public:
|
|||||||
#define S_FTP 254 //... see ftp.txt
|
#define S_FTP 254 //... see ftp.txt
|
||||||
#define X_KEEPALIVE 255 // no parameters, should be ignored...
|
#define X_KEEPALIVE 255 // no parameters, should be ignored...
|
||||||
|
|
||||||
#define TX_SYSTEM 0 // System message...
|
#define TX_SYSTEM 0 // 시스템 메시지...
|
||||||
#define TX_NORMAL 1 // Regular chat text
|
#define TX_NORMAL 1 // 일반 채팅 텍스트
|
||||||
#define TX_WARNING 2 // Warning
|
#define TX_WARNING 2 // 경고
|
||||||
#define TX_ERROR 3 // Error
|
#define TX_ERROR 3 // 오류
|
||||||
#define TX_FATAL 4 // Fatal error
|
#define TX_FATAL 4 // 치명적인 오류
|
||||||
#define TX_INFO 5 // Information result (e.g. user info)...
|
#define TX_INFO 5 // 사용자 정보 등의 Information Result...
|
||||||
#define TX_SAY 6 // Whisper
|
#define TX_SAY 6 // 귓속말
|
||||||
#define TX_LOCAL 7 // local echo....
|
#define TX_LOCAL 7 // local echo....
|
||||||
#define TX_UNKNOWN 0xffff // unknown...
|
#define TX_UNKNOWN 0xffff // unknown...
|
||||||
|
|
||||||
@@ -493,7 +493,7 @@ CPacket
|
|||||||
protected:
|
protected:
|
||||||
CSOC* m_pSOC;
|
CSOC* m_pSOC;
|
||||||
private:
|
private:
|
||||||
// The block within must be contiguous...
|
// 이 안의 블럭은 반드시 연속해야 한다...
|
||||||
WORD m_wLen;
|
WORD m_wLen;
|
||||||
BYTE m_ba[MAX_PACKET];
|
BYTE m_ba[MAX_PACKET];
|
||||||
//
|
//
|
||||||
@@ -587,7 +587,7 @@ end of variable PACKET_MAP definitions...
|
|||||||
class CFileTransfer : public TDBLNK(CFileTransfer*)
|
class CFileTransfer : public TDBLNK(CFileTransfer*)
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Information received from server... - or information to relay to client...
|
// 서버로 부터 받은 정보... - 혹은 클라이언트에게 전해줄 정보...
|
||||||
BOOL m_bClientSite;
|
BOOL m_bClientSite;
|
||||||
DWORD m_dwFTID;
|
DWORD m_dwFTID;
|
||||||
DWORD m_dwGUARD;
|
DWORD m_dwGUARD;
|
||||||
@@ -680,18 +680,18 @@ protected:
|
|||||||
// time out to Drop...
|
// time out to Drop...
|
||||||
DWORD m_dwKARcvTimeOut;
|
DWORD m_dwKARcvTimeOut;
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
// Window handle typically used during Login process
|
// 보통 Login과정에 쓰이는 윈도우 핸들
|
||||||
HWND m_hWndOwner;
|
HWND m_hWndOwner;
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
// For auto NULL assignment of socket pointer typically used as a global variable
|
// 보통 글로벌 변수로 쓰이는 소켓포인터에 대한 자동 NULL Assign을 위하여
|
||||||
PSOC* m_ppSOC;
|
PSOC* m_ppSOC;
|
||||||
// ID used in user program to identify a socket
|
// 소켓을 구분하기 위하여 사용자 프로그램에서 쓰이는 아이디
|
||||||
// Mainly for servers: assigns a unique ID each time a client connects
|
// 주로 서버의 경우에는 클라이언트가 접속할 때마다 고유 아이디를 부여하여 사용
|
||||||
// Used to distinguish each connection when a client connects to multiple servers (Star topology)
|
// 하나의 Client가 다수의 서버에 접속할 때(주로 Star형) 각각의 접속을 구분할 때 사용
|
||||||
// When a client connects to only one server: used to check if client is connecting or already connected
|
// 클라이언트가 하나의 서버에만 접속하는 경우 클라이언트가 서버에 접속 중인지 혹은 접속했는지를 판단할 때
|
||||||
// Use CSOCManager::FindSOC(CSOC_SERVER_ID==default)->GetConnectionState().
|
// CSOCManager::FindSOC(CSOC_SERVER_ID==default)->GetConnectionState()를 사용.
|
||||||
// Must include limits.h.
|
// limits.h를 include해야함.
|
||||||
// Default values at CSOC creation: CSOCServer==CSOC_SERVER_ID(INT_MIN), CSOCClient==CSOC_CLIENT_ID(0), CSOCListen==CSOC_LISTEN_ID(-1)
|
// CSOC생성시의 기본값: CSOCServer == CSOC_SERVER_ID(=INT_MIN), CSOCClient == CSOC_CLIENT_ID(=0), CSOCListen == CSOC_LISTEN_ID(=-1)
|
||||||
union {
|
union {
|
||||||
int m_nID;
|
int m_nID;
|
||||||
UINT m_uID;
|
UINT m_uID;
|
||||||
@@ -725,8 +725,8 @@ protected:
|
|||||||
DWORD m_xGracefulRemote: 1;
|
DWORD m_xGracefulRemote: 1;
|
||||||
DWORD m_xAbortyLocal: 1;
|
DWORD m_xAbortyLocal: 1;
|
||||||
DWORD m_xAbortyRemote: 1;
|
DWORD m_xAbortyRemote: 1;
|
||||||
DWORD m_xLoginStarted: 1; // Must be set directly by the caller.
|
DWORD m_xLoginStarted: 1; // 사용자가 직접 값을 Setting해야 한다.
|
||||||
DWORD m_xLoginOK: 1; // Must be set directly by the caller.
|
DWORD m_xLoginOK: 1; // 사용자가 직접 값을 Setting해야 한다.
|
||||||
} m_DW;
|
} m_DW;
|
||||||
DWORD m_dwVarFlags;
|
DWORD m_dwVarFlags;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ inline BOOL AssertDialog(const char* pcszExpr, const char* pcszfile, int nLine)
|
|||||||
{
|
{
|
||||||
char szBuf[MAX_PATH * 2];
|
char szBuf[MAX_PATH * 2];
|
||||||
|
|
||||||
sprintf(szBuf, "ASSERT!!! in \"%s\" at line %d\n\nDo you want to debug?", pcszfile, nLine);
|
sprintf(szBuf, "\"%s\" 파일의 %d줄에서 ASSERT!!!\n\n디버깅을 하시겠습니까?", pcszfile, nLine);
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
return ::MessageBox(NULL, szBuf, pcszExpr, MB_YESNO) == IDYES;
|
return ::MessageBox(NULL, szBuf, pcszExpr, MB_YESNO) == IDYES;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ inline BOOL AssertDialog(const char* pcszExpr, const char* pcszfile, int nLine)
|
|||||||
{
|
{
|
||||||
char szBuf[MAX_PATH * 2];
|
char szBuf[MAX_PATH * 2];
|
||||||
|
|
||||||
sprintf(szBuf, "ASSERT!!! in \"%s\" at line %d\n\nDo you want to debug?", pcszfile, nLine);
|
sprintf(szBuf, "\"%s\" 파일의 %d줄에서 ASSERT!!!\n\n디버깅을 하시겠습니까?", pcszfile, nLine);
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
return ::MessageBox(NULL, szBuf, pcszExpr, MB_YESNO) == IDYES;
|
return ::MessageBox(NULL, szBuf, pcszExpr, MB_YESNO) == IDYES;
|
||||||
|
|||||||
@@ -76,18 +76,18 @@ typedef struct
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
//· code for changing sort order or priority levels
|
//· code for changing sort order or priority levels
|
||||||
//· new sort order
|
//· new sort order
|
||||||
//· new priority level
|
//· new priority level
|
||||||
//· priority set to remove
|
//· priority set to remove
|
||||||
//· priority set to add
|
//· priority set to add
|
||||||
} AdjustCommandData;
|
} AdjustCommandData;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
//· command area from which to remove command
|
//· command area from which to remove command
|
||||||
//· command id of command to remove
|
//· command id of command to remove
|
||||||
//· other info to pick what command to remove
|
//· other info to pick what command to remove
|
||||||
} RemoveCommandData;
|
} RemoveCommandData;
|
||||||
|
|
||||||
union CommandUnion
|
union CommandUnion
|
||||||
|
|||||||
@@ -104,8 +104,8 @@ void CRIOMAIN::UpdateJoystickY (DIJOYSTATE &js)
|
|||||||
|
|
||||||
lJ = JoystickY_Center - g_JoystickY;
|
lJ = JoystickY_Center - g_JoystickY;
|
||||||
|
|
||||||
// High sensitivity
|
// 고감도
|
||||||
// Calculate from the moment of exiting the Dead Zone as 0
|
// Dead Zone 에서 벗어난 시점을 0으로 계산한다
|
||||||
if (lJ > 0) {
|
if (lJ > 0) {
|
||||||
lJ -= DEADZONE_JOYSTICK;
|
lJ -= DEADZONE_JOYSTICK;
|
||||||
} else if (lJ < 0) {
|
} else if (lJ < 0) {
|
||||||
|
|||||||
@@ -19,16 +19,16 @@
|
|||||||
#include <MLR\MLRTexture.hpp>
|
#include <MLR\MLRTexture.hpp>
|
||||||
|
|
||||||
#include "MWObject.hpp"
|
#include "MWObject.hpp"
|
||||||
//sanghoon begin
|
//상훈짱 begin
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <ddraw.h>
|
#include <ddraw.h>
|
||||||
#include <d3d.h>
|
#include <d3d.h>
|
||||||
|
|
||||||
#include <GameOS\render.hpp>
|
#include <GameOS\render.hpp>
|
||||||
#define RADAR_SCALE 2.8f
|
#define RADAR_SCALE 2.8f
|
||||||
//sanghoon end
|
//상훈짱 end
|
||||||
|
|
||||||
int m_gCool; // hyun: coolant
|
int m_gCool; // 鉉
|
||||||
|
|
||||||
namespace MW4AI
|
namespace MW4AI
|
||||||
{
|
{
|
||||||
@@ -121,22 +121,22 @@ GUIRadarManager::GUIRadarManager() :
|
|||||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
//
|
//
|
||||||
|
|
||||||
//sanghoon
|
//상훈
|
||||||
extern bool sh_game_started;
|
extern bool sh_game_started;
|
||||||
|
|
||||||
GUIRadarManager::~GUIRadarManager()
|
GUIRadarManager::~GUIRadarManager()
|
||||||
{
|
{
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
sh_game_started=false;
|
sh_game_started=false;
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
delete m_RangeText;
|
delete m_RangeText;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawMapBoundary()
|
void DrawMapBoundary()
|
||||||
{
|
{
|
||||||
//Extracted from DrawImplementation..
|
//DrawImplementation에서 추출해왔음..
|
||||||
//Drawn only once after mission start (operation area on map does not change..)
|
//미션이 시작한 후 한번만 그리게된다.(맵상의 작전 영역은 변하지 않으므로..)
|
||||||
Scalar multx,multz;
|
Scalar multx,multz;
|
||||||
|
|
||||||
multx = 200.0f/(MW4AI::MaxX - MW4AI::MinX);
|
multx = 200.0f/(MW4AI::MaxX - MW4AI::MinX);
|
||||||
@@ -148,7 +148,7 @@ void DrawMapBoundary()
|
|||||||
int numpts = ptlist.GetLength ();
|
int numpts = ptlist.GetLength ();
|
||||||
|
|
||||||
HDC hdcBackImage;
|
HDC hdcBackImage;
|
||||||
radar_device.pDDSBackground->GetDC( &hdcBackImage);//Image for back buffer preparation..
|
radar_device.pDDSBackground->GetDC( &hdcBackImage);//백버퍼 준비용.. 이미지..
|
||||||
HPEN hpenold=(HPEN)SelectObject(hdcBackImage,CreatePen(PS_SOLID,1,RGB(255,0,0)));
|
HPEN hpenold=(HPEN)SelectObject(hdcBackImage,CreatePen(PS_SOLID,1,RGB(255,0,0)));
|
||||||
|
|
||||||
for (int i=0;i<numpts;i++){
|
for (int i=0;i<numpts;i++){
|
||||||
@@ -184,7 +184,7 @@ void DrawMapBoundary()
|
|||||||
|
|
||||||
void GUIRadarManager::Reset (void)
|
void GUIRadarManager::Reset (void)
|
||||||
{
|
{
|
||||||
//sanghoon
|
//상훈
|
||||||
|
|
||||||
MWApplication *m_App;
|
MWApplication *m_App;
|
||||||
m_App = MWApplication::GetInstance ();
|
m_App = MWApplication::GetInstance ();
|
||||||
@@ -192,19 +192,19 @@ void GUIRadarManager::Reset (void)
|
|||||||
bool networking = MWApplication::GetInstance()->networkingFlag;
|
bool networking = MWApplication::GetInstance()->networkingFlag;
|
||||||
if (!networking)
|
if (!networking)
|
||||||
m_RadarMode = 0;
|
m_RadarMode = 0;
|
||||||
//sanghoon
|
//상훈
|
||||||
if(hsh_initialized)
|
if(hsh_initialized)
|
||||||
DrawMapBoundary();
|
DrawMapBoundary();
|
||||||
}
|
}
|
||||||
|
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
/*
|
/*
|
||||||
char * radar_text[]={
|
char * radar_text[]={
|
||||||
"JUMP\nJET","SHUT\nDOWN","OVER\nRIDE","FLUSH","CROUCH","",
|
"JUMP\nJET","SHUT\nDOWN","OVER\nRIDE","FLUSH","CROUCH","",
|
||||||
"RANGE","RADAR\nMODE","LIGHT\nAMP","SEARCH\nLIGHT","AUTO\nCENTER"
|
"RANGE","RADAR\nMODE","LIGHT\nAMP","SEARCH\nLIGHT","AUTO\nCENTER"
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
|
|
||||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
//
|
//
|
||||||
@@ -246,7 +246,7 @@ if(!hsh_initialized){
|
|||||||
Check_Pointer(vehicle);
|
Check_Pointer(vehicle);
|
||||||
Check_Pointer(vehicle->GetSensor());
|
Check_Pointer(vehicle->GetSensor());
|
||||||
/*
|
/*
|
||||||
//sanghoon begin: map
|
//상훈 앞 맵
|
||||||
Scalar multx,multz;
|
Scalar multx,multz;
|
||||||
|
|
||||||
multx = 200.0f/(MW4AI::MaxX - MW4AI::MinX);
|
multx = 200.0f/(MW4AI::MaxX - MW4AI::MinX);
|
||||||
@@ -655,7 +655,7 @@ if(!hsh_initialized){
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
// Secondary Maps
|
// Secondary Maps
|
||||||
//Draw map and boundary. (Drawn once since it does not change during game.)
|
//맵과 맵 경계선을 그린다. (게임중에 변하지 않으므로 한번만 그린다.)
|
||||||
|
|
||||||
if(!radar_device.MapDrawn){
|
if(!radar_device.MapDrawn){
|
||||||
extern char AssetsDirectory1[MAX_PATH];
|
extern char AssetsDirectory1[MAX_PATH];
|
||||||
@@ -724,8 +724,8 @@ if(!hsh_initialized){
|
|||||||
Check_Pointer(vehicle->GetSensor());
|
Check_Pointer(vehicle->GetSensor());
|
||||||
|
|
||||||
|
|
||||||
///////////////////// MAP BEGIN //////////////////////
|
///////////////////// MAP 시작 //////////////////////
|
||||||
/////Torso Sweep draw.. begin
|
/////Torso Sweep그리기.. 시작
|
||||||
Scalar multx,multz;
|
Scalar multx,multz;
|
||||||
|
|
||||||
multx = 200.0f/(MW4AI::MaxX - MW4AI::MinX);
|
multx = 200.0f/(MW4AI::MaxX - MW4AI::MinX);
|
||||||
@@ -759,16 +759,16 @@ if(!hsh_initialized){
|
|||||||
radar_device.DrawQuad(-pos.x+240-1,-pos.y+508-1,-pos.x+240+2,-pos.y+508+2,0xFF0000C0);
|
radar_device.DrawQuad(-pos.x+240-1,-pos.y+508-1,-pos.x+240+2,-pos.y+508+2,0xFF0000C0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/////Torso Sweep draw.. end
|
/////Torso Sweep그리기.. 끝
|
||||||
|
|
||||||
//Draw objects on map.
|
//맵상에 오브젝트들 그리기.
|
||||||
{
|
{
|
||||||
radar_device.pD3DDevice->SetTexture(0,radar_device.pDDSTexture);
|
radar_device.pD3DDevice->SetTexture(0,radar_device.pDDSTexture);
|
||||||
MWObject *hsh_current_object;
|
MWObject *hsh_current_object;
|
||||||
for(i=0;i<vehicle->GetSensor()->numberOfContacts;i++){
|
for(i=0;i<vehicle->GetSensor()->numberOfContacts;i++){
|
||||||
hsh_current_object=vehicle->GetSensor()->GetSensorData()[i]->object.GetCurrent();
|
hsh_current_object=vehicle->GetSensor()->GetSensorData()[i]->object.GetCurrent();
|
||||||
if (hsh_current_object != NULL){
|
if (hsh_current_object != NULL){
|
||||||
bool draw_contact = true;//Flag: whether to draw this object..
|
bool draw_contact = true;//해당 오브젝트를 그릴것인지..에대한 플래그..
|
||||||
|
|
||||||
// MSL 5.02 Bot on Map
|
// MSL 5.02 Bot on Map
|
||||||
if (hsh_current_object->GetAI()==NULL && (MWApplication::GetInstance()->networkingFlag == false))draw_contact = false;
|
if (hsh_current_object->GetAI()==NULL && (MWApplication::GetInstance()->networkingFlag == false))draw_contact = false;
|
||||||
@@ -833,10 +833,10 @@ if(!hsh_initialized){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////// MAP END //////////////////////
|
///////////////////// MAP 끝 //////////////////////
|
||||||
|
|
||||||
|
|
||||||
///////////////////// RADAR BEGIN //////////////////////
|
///////////////////// RADAR 시작 //////////////////////
|
||||||
|
|
||||||
radar_device.pD3DDevice->SetTexture(0,0);
|
radar_device.pD3DDevice->SetTexture(0,0);
|
||||||
|
|
||||||
@@ -855,7 +855,7 @@ if(!hsh_initialized){
|
|||||||
world_to_vehicle.Invert(vehicle_to_world);
|
world_to_vehicle.Invert(vehicle_to_world);
|
||||||
|
|
||||||
|
|
||||||
// Draw boundary line..
|
// 경계선 그리기..
|
||||||
|
|
||||||
Mission *miss;
|
Mission *miss;
|
||||||
miss = Mission::GetInstance ();
|
miss = Mission::GetInstance ();
|
||||||
@@ -900,7 +900,7 @@ if(!hsh_initialized){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Draw Torso View..
|
//Torso View그리기..
|
||||||
//HSH_RenderRadarTorsoView(-m_TorsoTwist);
|
//HSH_RenderRadarTorsoView(-m_TorsoTwist);
|
||||||
radar_device.pD3DDevice->SetTexture(0,radar_device.pDDSTexture);
|
radar_device.pD3DDevice->SetTexture(0,radar_device.pDDSTexture);
|
||||||
radar_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
radar_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
||||||
@@ -914,7 +914,7 @@ if(!hsh_initialized){
|
|||||||
radar_device.pD3DDevice->SetTextureStageState(0,D3DTSS_MAGFILTER, D3DTFG_POINT );
|
radar_device.pD3DDevice->SetTextureStageState(0,D3DTSS_MAGFILTER, D3DTFG_POINT );
|
||||||
radar_device.pD3DDevice->SetTextureStageState(0,D3DTSS_MINFILTER, D3DTFG_POINT );
|
radar_device.pD3DDevice->SetTextureStageState(0,D3DTSS_MINFILTER, D3DTFG_POINT );
|
||||||
|
|
||||||
//Draw Radar range.
|
//Radar범위 그리기.
|
||||||
char text[10];
|
char text[10];
|
||||||
if (radarRange != radarRangeOrg)
|
if (radarRange != radarRangeOrg)
|
||||||
sprintf (text,"NoLmt");
|
sprintf (text,"NoLmt");
|
||||||
@@ -923,11 +923,11 @@ if(!hsh_initialized){
|
|||||||
//HSH_DrawRadarNumber(345,386,text,1);
|
//HSH_DrawRadarNumber(345,386,text,1);
|
||||||
radar_device.pFont[1].DrawText(80,350,0xFFFFFFFF,text,TEXTALIGN_ORG);
|
radar_device.pFont[1].DrawText(80,350,0xFFFFFFFF,text,TEXTALIGN_ORG);
|
||||||
|
|
||||||
//Draw ActiveMode..
|
//ActiveMode그리기..
|
||||||
char* modechar=(vehicle->GetSensor ()->GetSensorMode () == Sensor::ActiveMode)?"Active":"Passive";
|
char* modechar=(vehicle->GetSensor ()->GetSensorMode () == Sensor::ActiveMode)?"Active":"Passive";
|
||||||
radar_device.pFont[1].DrawText(395,350,0xFFFFFF,modechar,TEXTALIGN_ORG);
|
radar_device.pFont[1].DrawText(395,350,0xFFFFFF,modechar,TEXTALIGN_ORG);
|
||||||
|
|
||||||
//Draw buildings.
|
//빌딩 그리기
|
||||||
MWObject *current_object;
|
MWObject *current_object;
|
||||||
for(i=0;i<vehicle->GetSensor()->numberOfBuildingContacts;i++)
|
for(i=0;i<vehicle->GetSensor()->numberOfBuildingContacts;i++)
|
||||||
{
|
{
|
||||||
@@ -993,7 +993,7 @@ if(!hsh_initialized){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw Objects.
|
//Object그리기.
|
||||||
for(i=0;i<vehicle->GetSensor()->numberOfContacts;i++){
|
for(i=0;i<vehicle->GetSensor()->numberOfContacts;i++){
|
||||||
current_object=vehicle->GetSensor()->GetSensorData()[i]->object.GetCurrent();
|
current_object=vehicle->GetSensor()->GetSensorData()[i]->object.GetCurrent();
|
||||||
if (current_object != NULL){
|
if (current_object != NULL){
|
||||||
@@ -1081,7 +1081,7 @@ if(!hsh_initialized){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw Navigation Points.
|
//Navigation Point그리기.
|
||||||
j=0;
|
j=0;
|
||||||
ChainIteratorOf<NavPoint *> iter (NavPoint::s_RevealedNavPoints);
|
ChainIteratorOf<NavPoint *> iter (NavPoint::s_RevealedNavPoints);
|
||||||
NavPoint *nav;
|
NavPoint *nav;
|
||||||
@@ -1136,7 +1136,7 @@ if(!hsh_initialized){
|
|||||||
radar_device.DrawTexture(posx2,posy2,0xFFFFFFFF,(60+id*12),0,(60+id*12)+12,12);
|
radar_device.DrawTexture(posx2,posy2,0xFFFFFFFF,(60+id*12),0,(60+id*12)+12,12);
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////// RADAR END //////////////////////
|
///////////////////// RADAR 끝 //////////////////////
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1586,23 +1586,23 @@ if(!hsh_initialized){
|
|||||||
|
|
||||||
|
|
||||||
DWORD color = MakeColor (64,64,64,255);
|
DWORD color = MakeColor (64,64,64,255);
|
||||||
//Bar gauge background baseline..
|
//막대 게이지의 백그라운드.. 기준..
|
||||||
m_Textures[1]->Draw (loc,size,color,HUDTexture::NO_FLIP,true);
|
m_Textures[1]->Draw (loc,size,color,HUDTexture::NO_FLIP,true);
|
||||||
color = MakeColor (255,255,255,255);
|
color = MakeColor (255,255,255,255);
|
||||||
loc.y += size.y - targetyval;
|
loc.y += size.y - targetyval;
|
||||||
size.y = (Scalar) targetyval;
|
size.y = (Scalar) targetyval;
|
||||||
m_Textures[0]->TopLeft (m_Textures[0]->Left (),(Scalar) (m_BaseBottom - targetyval));
|
m_Textures[0]->TopLeft (m_Textures[0]->Left (),(Scalar) (m_BaseBottom - targetyval));
|
||||||
m_Textures[0]->BlendMode (gos_BlendDecal);
|
m_Textures[0]->BlendMode (gos_BlendDecal);
|
||||||
//Draw tri-color bar gauge.. (value adjusted by modifying clip size..)
|
//삼색 막대 게이지 그리기..(clipping size를 조절함으로써.. 값을 조절하는 효과를 나타낸다.)
|
||||||
|
|
||||||
m_Textures[0]->Draw (loc,size,color,HUDTexture::NO_FLIP);
|
m_Textures[0]->Draw (loc,size,color,HUDTexture::NO_FLIP);
|
||||||
color = MakeColor (0,125,0,250);
|
color = MakeColor (0,125,0,250);
|
||||||
size = Size ();
|
size = Size ();
|
||||||
loc = Location ();
|
loc = Location ();
|
||||||
//Bar gauge frame.
|
//막대 게이지의 프레임.
|
||||||
DrawFrame ((int) (loc.x-2),(int) (loc.y-2),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
DrawFrame ((int) (loc.x-2),(int) (loc.y-2),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
||||||
|
|
||||||
//Temperature text frame..
|
//온도 텍스트의 프레임..
|
||||||
DrawFrame (261,542,303,560,color);
|
DrawFrame (261,542,303,560,color);
|
||||||
m_HeatText->TopLeft (261,542);
|
m_HeatText->TopLeft (261,542);
|
||||||
m_HeatText->BottomRight (303,560);
|
m_HeatText->BottomRight (303,560);
|
||||||
@@ -1611,23 +1611,23 @@ if(!hsh_initialized){
|
|||||||
DWORD textw,texth;
|
DWORD textw,texth;
|
||||||
m_HeatText->DrawSize (textw,texth);
|
m_HeatText->DrawSize (textw,texth);
|
||||||
|
|
||||||
//Display temperature in its designated color. (Gauge is a texture, no color spec needed.)
|
//온도를 정해진 색으로 출력한다.(게이지는 텍스쳐이므로 색을 지정할 필요가 없다.)
|
||||||
m_HeatText->Draw (Point3D (282.0f - (textw/2.0f),551.0f - (texth/2.0f),0.9f));
|
m_HeatText->Draw (Point3D (282.0f - (textw/2.0f),551.0f - (texth/2.0f),0.9f));
|
||||||
DrawLine (304,549,310,549,color);
|
DrawLine (304,549,310,549,color);
|
||||||
DrawLine (309,(int) heaty,309,549,color);
|
DrawLine (309,(int) heaty,309,549,color);
|
||||||
DrawLine ((int) (loc.x-2),(int) (heaty),309,(int) (heaty),color);
|
DrawLine ((int) (loc.x-2),(int) (heaty),309,(int) (heaty),color);
|
||||||
}else if(sh_step==1){
|
}else if(sh_step==1){
|
||||||
//radar manager is not called on shutdown.. state updated additionally here.
|
//radar manager는 shutdown 시에 호출되지 않으므로.. 여기서 추가적으로 state를 업데이트 시켜준다.
|
||||||
MechWarrior4::VehicleInterface* p = MechWarrior4::VehicleInterface::GetInstance();
|
MechWarrior4::VehicleInterface* p = MechWarrior4::VehicleInterface::GetInstance();
|
||||||
p->GetGUIRadarStates(radar_device.recent_state);
|
p->GetGUIRadarStates(radar_device.recent_state);
|
||||||
|
|
||||||
int targetyval = (int) ((m_Heat * 23)/100.0f);
|
int targetyval = (int) ((m_Heat * 23)/100.0f);
|
||||||
Clamp (targetyval,0,22);
|
Clamp (targetyval,0,22);
|
||||||
//What is the range of heat??? 0~100???
|
//heat의 범위는??? 0~100???
|
||||||
|
|
||||||
//Draw current temperature only, without the target.
|
//target은 그리지 않고 현재 온도만 그린다.
|
||||||
float sizey=256;
|
float sizey=256;
|
||||||
//Draw tri-color bar gauge.. (value adjusted by modifying clip size..)
|
//삼색 막대 게이지 그리기..(clipping size를 조절함으로써.. 값을 조절하는 효과를 나타낸다.)
|
||||||
{
|
{
|
||||||
radar_device.pD3DDevice->SetTexture(0,radar_device.pDDSTexture);
|
radar_device.pD3DDevice->SetTexture(0,radar_device.pDDSTexture);
|
||||||
//backbground image
|
//backbground image
|
||||||
@@ -1642,7 +1642,7 @@ if(!hsh_initialized){
|
|||||||
radar_device.pD3DDevice->SetTexture(0,0);
|
radar_device.pD3DDevice->SetTexture(0,0);
|
||||||
radar_device.DrawFrame(54-1,630-188-3,80+1,630+3,0xFFFFFFFF);
|
radar_device.DrawFrame(54-1,630-188-3,80+1,630+3,0xFFFFFFFF);
|
||||||
}
|
}
|
||||||
//Text
|
//텍스트
|
||||||
{
|
{
|
||||||
char buf[16];
|
char buf[16];
|
||||||
// MSL 5.02 Heat Scale Header
|
// MSL 5.02 Heat Scale Header
|
||||||
@@ -1664,7 +1664,7 @@ HUDJump::HUDJump ()
|
|||||||
m_TargetJump = -1.0f;
|
m_TargetJump = -1.0f;
|
||||||
Location (Point3D (467,539,0.9f));
|
Location (Point3D (467,539,0.9f));
|
||||||
Size (Point3D (7,49,0.9f));
|
Size (Point3D (7,49,0.9f));
|
||||||
//Small 'j' character... <==actually barely visible.
|
//j라고 하는 작은 글자... <==실제로는 잘 보이지 않는다.
|
||||||
AddTexture ("hud\\hud4",0,98,200,106,207);
|
AddTexture ("hud\\hud4",0,98,200,106,207);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1703,14 +1703,14 @@ if(!hsh_initialized){
|
|||||||
size = Size ();
|
size = Size ();
|
||||||
loc = Location ();
|
loc = Location ();
|
||||||
|
|
||||||
DWORD color = MakeColor (255,255,255,250); // was originally 255,255,255,250
|
DWORD color = MakeColor (255,255,255,250); // 원래 255,255,255,250이었음
|
||||||
//Small 'j' character...
|
//j라고 하는 작은 글자...
|
||||||
m_Textures[0]->Draw (Point3D (loc.x+2,loc.y - m_Textures[0]->Size().y-2.0f,0.9f),m_Textures[0]->Size (),color);
|
m_Textures[0]->Draw (Point3D (loc.x+2,loc.y - m_Textures[0]->Size().y-2.0f,0.9f),m_Textures[0]->Size (),color);
|
||||||
int targetyval = (int) (m_Jump * size.y);
|
int targetyval = (int) (m_Jump * size.y);
|
||||||
|
|
||||||
color = MakeColor (0,125,0,250);
|
color = MakeColor (0,125,0,250);
|
||||||
|
|
||||||
//Green gauge..
|
//녹색 게이지..
|
||||||
my_DrawRect ((int) (loc.x),(int) (loc.y+size.y-targetyval),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
my_DrawRect ((int) (loc.x),(int) (loc.y+size.y-targetyval),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
||||||
if ((m_Jump != 0) && (m_Alpha != 0))
|
if ((m_Jump != 0) && (m_Alpha != 0))
|
||||||
{
|
{
|
||||||
@@ -1718,11 +1718,11 @@ if(!hsh_initialized){
|
|||||||
my_DrawRect ((int) (loc.x),(int) (loc.y+size.y-targetyval),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
my_DrawRect ((int) (loc.x),(int) (loc.y+size.y-targetyval),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
||||||
}
|
}
|
||||||
|
|
||||||
//White line at the top of gauge..
|
//게이지 맨위의 흰선..
|
||||||
color = MakeColor (255,255,255,200);
|
color = MakeColor (255,255,255,200);
|
||||||
DrawLine ((int) (loc.x),(int) (loc.y+size.y-targetyval),(int) (loc.x+size.x),(int) (loc.y+size.y-targetyval),color);
|
DrawLine ((int) (loc.x),(int) (loc.y+size.y-targetyval),(int) (loc.x+size.x),(int) (loc.y+size.y-targetyval),color);
|
||||||
|
|
||||||
//Draw border..
|
//테두리 그리기..
|
||||||
color = MakeColor (0,125,0,250);
|
color = MakeColor (0,125,0,250);
|
||||||
DrawFrame ((int) loc.x,(int) (loc.y),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
DrawFrame ((int) loc.x,(int) (loc.y),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
||||||
}else if(sh_step==1){
|
}else if(sh_step==1){
|
||||||
@@ -1736,7 +1736,7 @@ if(!hsh_initialized){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Overall almost identical to jumpjet.
|
//전반적으로 jumpjet과 거의 같다.
|
||||||
HUDCoolant::HUDCoolant ()
|
HUDCoolant::HUDCoolant ()
|
||||||
{
|
{
|
||||||
m_Alpha = 255;
|
m_Alpha = 255;
|
||||||
@@ -1745,7 +1745,7 @@ HUDCoolant::HUDCoolant ()
|
|||||||
m_Cool = 100;
|
m_Cool = 100;
|
||||||
Location (Point3D (332,539,0.9f));
|
Location (Point3D (332,539,0.9f));
|
||||||
Size (Point3D (7,49,0.9f));
|
Size (Point3D (7,49,0.9f));
|
||||||
//Small 'C' character..
|
//C라고 하는 작은 글자..
|
||||||
AddTexture ("hud\\hud4",0,88,200,96,207);
|
AddTexture ("hud\\hud4",0,88,200,96,207);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1782,7 +1782,7 @@ if(!hsh_initialized){
|
|||||||
loc = Location ();
|
loc = Location ();
|
||||||
|
|
||||||
DWORD color = MakeColor (0,125,0,250);
|
DWORD color = MakeColor (0,125,0,250);
|
||||||
//Small 'C' character..
|
//C라고 하는 작은 글자..
|
||||||
m_Textures[0]->Draw (Point3D (loc.x+2,loc.y - m_Textures[0]->Size().y-2.0f,0.9f),m_Textures[0]->Size (),color);
|
m_Textures[0]->Draw (Point3D (loc.x+2,loc.y - m_Textures[0]->Size().y-2.0f,0.9f),m_Textures[0]->Size (),color);
|
||||||
|
|
||||||
m_gCool = m_Cool;
|
m_gCool = m_Cool;
|
||||||
@@ -1790,19 +1790,19 @@ if(!hsh_initialized){
|
|||||||
Clamp (targetyval,0,(int) size.y);
|
Clamp (targetyval,0,(int) size.y);
|
||||||
|
|
||||||
color = MakeColor (0,100,255,250);
|
color = MakeColor (0,100,255,250);
|
||||||
//Draw gauge..
|
//게이지 그리기..
|
||||||
my_DrawRect ((int) (loc.x),(int) (loc.y+size.y-targetyval),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
my_DrawRect ((int) (loc.x),(int) (loc.y+size.y-targetyval),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
||||||
if ((m_Cool != 0) && (m_Alpha != 0))
|
if ((m_Cool != 0) && (m_Alpha != 0))
|
||||||
{
|
{
|
||||||
//When flushed.. draw white blinking effect...
|
//flush했을때.. 흰색으로 깜박이는 효과 그리기...
|
||||||
color = MakeColor (255,255,255,m_Alpha);
|
color = MakeColor (255,255,255,m_Alpha);
|
||||||
my_DrawRect ((int) (loc.x),(int) (loc.y+size.y-targetyval),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
my_DrawRect ((int) (loc.x),(int) (loc.y+size.y-targetyval),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
||||||
}
|
}
|
||||||
color = MakeColor (255,255,255,200);
|
color = MakeColor (255,255,255,200);
|
||||||
//White line above gauge..
|
//게이지 위쪽의 흰선..
|
||||||
DrawLine ((int) (loc.x),(int) (loc.y+size.y-targetyval),(int) (loc.x+size.x),(int) (loc.y+size.y-targetyval),color);
|
DrawLine ((int) (loc.x),(int) (loc.y+size.y-targetyval),(int) (loc.x+size.x),(int) (loc.y+size.y-targetyval),color);
|
||||||
|
|
||||||
//Frame surrounding gauge..
|
//게이지를 둘러싸는 프레임..
|
||||||
color = MakeColor (0,125,0,250);
|
color = MakeColor (0,125,0,250);
|
||||||
DrawFrame ((int) loc.x,(int) (loc.y),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
DrawFrame ((int) loc.x,(int) (loc.y),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
||||||
}else if(sh_step==1){
|
}else if(sh_step==1){
|
||||||
@@ -1817,7 +1817,7 @@ if(!hsh_initialized){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//HUD Component displaying speed...
|
//속도를 나타내는... HUD Component
|
||||||
namespace NHUDSPEED
|
namespace NHUDSPEED
|
||||||
{
|
{
|
||||||
// const int for_speed_box[12] = {0,4,8,12,16,20,24,28,32,36,40,44};
|
// const int for_speed_box[12] = {0,4,8,12,16,20,24,28,32,36,40,44};
|
||||||
@@ -1928,25 +1928,25 @@ if(!hsh_initialized){
|
|||||||
speedy = loc.y + 56 - fred;
|
speedy = loc.y + 56 - fred;
|
||||||
|
|
||||||
DWORD color = MakeColor (255,255,255,255);
|
DWORD color = MakeColor (255,255,255,255);
|
||||||
//Gauge background tick marks..
|
//게이지 백그라운드 눈금..
|
||||||
m_Textures[1]->Draw (loc,size,color,HUDTexture::NO_FLIP,true);
|
m_Textures[1]->Draw (loc,size,color,HUDTexture::NO_FLIP,true);
|
||||||
loc.y += top;
|
loc.y += top;
|
||||||
size.y = (Scalar) bottom - top;
|
size.y = (Scalar) bottom - top;
|
||||||
|
|
||||||
//Draw tri-color bar gauge.. (value adjusted by modifying clip size..)
|
//삼색 막대 게이지 그리기..(clipping size를 조절함으로써.. 값을 조절하는 효과를 나타낸다.)
|
||||||
|
|
||||||
m_Textures[0]->TopLeft (m_Textures[0]->Left (),(Scalar) (top));
|
m_Textures[0]->TopLeft (m_Textures[0]->Left (),(Scalar) (top));
|
||||||
m_Textures[0]->BottomRight (m_Textures[0]->Right (),(Scalar) (bottom));
|
m_Textures[0]->BottomRight (m_Textures[0]->Right (),(Scalar) (bottom));
|
||||||
m_Textures[0]->BlendMode (gos_BlendDecal);
|
m_Textures[0]->BlendMode (gos_BlendDecal);
|
||||||
//Colored gauge.. currently green.
|
//colored 게이지..녹색으로 되어 있다.
|
||||||
m_Textures[0]->Draw (loc,size,color,HUDTexture::NO_FLIP,true);
|
m_Textures[0]->Draw (loc,size,color,HUDTexture::NO_FLIP,true);
|
||||||
color = MakeColor (0,125,0,250);
|
color = MakeColor (0,125,0,250);
|
||||||
size = Size ();
|
size = Size ();
|
||||||
loc = Location ();
|
loc = Location ();
|
||||||
//Draw frame surrounding gauge..
|
//게이지를 둘러싸는.. 프레임 그리기..
|
||||||
DrawFrame ((int) (loc.x-2),(int) (loc.y-2),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
DrawFrame ((int) (loc.x-2),(int) (loc.y-2),(int) (loc.x+size.x),(int) (loc.y+size.y),color);
|
||||||
|
|
||||||
//Speed display frame...
|
//속도 표시하는 프레임...
|
||||||
DrawFrame (506,537,548,555,color);
|
DrawFrame (506,537,548,555,color);
|
||||||
m_SpeedText->TopLeft (506,537);
|
m_SpeedText->TopLeft (506,537);
|
||||||
m_SpeedText->BottomRight (548,555);
|
m_SpeedText->BottomRight (548,555);
|
||||||
@@ -1958,15 +1958,15 @@ if(!hsh_initialized){
|
|||||||
|
|
||||||
DWORD textw,texth;
|
DWORD textw,texth;
|
||||||
m_SpeedText->DrawSize (textw,texth);
|
m_SpeedText->DrawSize (textw,texth);
|
||||||
//Speed text.. color is green/blue depending on forward/backward direction.....
|
//속도 표시하는 텍스트.. 앞/뒤 방향에 따라서 색이 녹식/파란색.....으로 된다.
|
||||||
m_SpeedText->Draw (Point3D (527.0f - (textw/2.0f),546.0f - (texth/2.0f),0.9f));
|
m_SpeedText->Draw (Point3D (527.0f - (textw/2.0f),546.0f - (texth/2.0f),0.9f));
|
||||||
//3-segment line connecting speed frame to gauge frame..
|
//속도프레임-게이지 프레임 연결하는 3 segment라인..
|
||||||
DrawLine (498,549,506,549,color);
|
DrawLine (498,549,506,549,color);
|
||||||
DrawLine (498,(int) speedy,498,549,color);
|
DrawLine (498,(int) speedy,498,549,color);
|
||||||
DrawLine ((int) (loc.x+size.x+2),(int) (speedy),498,(int) (speedy),color);
|
DrawLine ((int) (loc.x+size.x+2),(int) (speedy),498,(int) (speedy),color);
|
||||||
}else if(sh_step==1){
|
}else if(sh_step==1){
|
||||||
//Not ideal, but draw mission time alongside speed display.
|
//적절하지는 않지만.. 미션 시간을 speed에서 같이 그린다.
|
||||||
//Draw mission timer... taken from DrawImplementation in hudtimer.cpp..
|
//미션 시간 그리기...hudtimer.cpp에 DrawImplementation에서 따온것임..
|
||||||
{
|
{
|
||||||
MWMission *mwmiss = Cast_Object (MWMission *,Mission::GetInstance ());
|
MWMission *mwmiss = Cast_Object (MWMission *,Mission::GetInstance ());
|
||||||
Verify (mwmiss);
|
Verify (mwmiss);
|
||||||
@@ -1983,7 +1983,7 @@ if(!hsh_initialized){
|
|||||||
}
|
}
|
||||||
|
|
||||||
float offset;
|
float offset;
|
||||||
//126,62.. speed 188.. divided 2:1..
|
//126,62.. 188의 속도.. 2:1로 나누면..
|
||||||
|
|
||||||
//backbground image
|
//backbground image
|
||||||
radar_device.pD3DDevice->SetTexture(0,radar_device.pDDSTexture);
|
radar_device.pD3DDevice->SetTexture(0,radar_device.pDDSTexture);
|
||||||
@@ -2094,8 +2094,8 @@ HUDNav::HUDNav()
|
|||||||
navPointName = new HUDText ();
|
navPointName = new HUDText ();
|
||||||
navPointRange = new HUDNumberText ();
|
navPointRange = new HUDNumberText ();
|
||||||
playerAngle = new HUDNumberText ();
|
playerAngle = new HUDNumberText ();
|
||||||
navPointRange->SetSize (HUDText::MEDIUM_SIZE); // was originally SMALL_SIZE
|
navPointRange->SetSize (HUDText::MEDIUM_SIZE); // 원래 SMALL_SIZE였음
|
||||||
playerAngle->SetSize (HUDText::MEDIUM_SIZE); // was originally SMALL_SIZE
|
playerAngle->SetSize (HUDText::MEDIUM_SIZE); // 원래 SMALL_SIZE였음
|
||||||
|
|
||||||
m_NavAlphaTime = 0;
|
m_NavAlphaTime = 0;
|
||||||
|
|
||||||
@@ -2203,14 +2203,14 @@ if(!hsh_initialized){
|
|||||||
m_Textures[10]->TopLeft ((Scalar) (m_BaseLeft + offset),m_Textures[10]->Top ());
|
m_Textures[10]->TopLeft ((Scalar) (m_BaseLeft + offset),m_Textures[10]->Top ());
|
||||||
size = m_Textures[10]->Size ();
|
size = m_Textures[10]->Size ();
|
||||||
m_Textures[10]->Draw (loc,size,color,HUDTexture::NO_FLIP,true);
|
m_Textures[10]->Draw (loc,size,color,HUDTexture::NO_FLIP,true);
|
||||||
//Main portion of aux2 ruler... (if not displayable here, use next one.)
|
//2번 aux의 줄자..의 대부분...(이걸로 표시되지 않을때.. 다음걸로 표시한다.)
|
||||||
#if 1
|
#if 1
|
||||||
loc.x += size.x;
|
loc.x += size.x;
|
||||||
loc.x-=1;
|
loc.x-=1;
|
||||||
m_Textures[13]->BottomRight ((Scalar) m_BaseLeft+offset,m_Textures[13]->Bottom ());
|
m_Textures[13]->BottomRight ((Scalar) m_BaseLeft+offset,m_Textures[13]->Bottom ());
|
||||||
size = m_Textures[13]->Size ();
|
size = m_Textures[13]->Size ();
|
||||||
m_Textures[13]->Draw (loc,size,color,HUDTexture::NO_FLIP,true);
|
m_Textures[13]->Draw (loc,size,color,HUDTexture::NO_FLIP,true);
|
||||||
//Short tick marks of aux2 ruler....
|
//2번 aux의 줄자의 짦은 부분....
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int heading = m_PlayerFacing;
|
int heading = m_PlayerFacing;
|
||||||
@@ -2223,7 +2223,7 @@ if(!hsh_initialized){
|
|||||||
bool draw = false;
|
bool draw = false;
|
||||||
if (dir < 0)
|
if (dir < 0)
|
||||||
dir += 360;
|
dir += 360;
|
||||||
else if (dir > 360)//sanghoon fix: original was --> "else if (dir > 360)"..
|
else if (dir > 360)//상훈 고침.. 원래는 --> "else if (dir > 360)" 였음..
|
||||||
dir -= 360;
|
dir -= 360;
|
||||||
switch (dir)
|
switch (dir)
|
||||||
{
|
{
|
||||||
@@ -2265,11 +2265,11 @@ if(!hsh_initialized){
|
|||||||
navText[textid]->DrawSize (dx,dy);
|
navText[textid]->DrawSize (dx,dy);
|
||||||
textloc.x -= dx/2;
|
textloc.x -= dx/2;
|
||||||
navText[textid]->Draw (textloc);
|
navText[textid]->Draw (textloc);
|
||||||
//Aux2 bearing display.. 340 350 N 10 20...
|
//2번 aux방위각 표시.. 340 350 N 10 20...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Aux2 mech heading angle display...
|
//2번 aux mech의 방향각도 표시...
|
||||||
color = Color ();
|
color = Color ();
|
||||||
DrawFrame (400-13,10,400+13,22,color);
|
DrawFrame (400-13,10,400+13,22,color);
|
||||||
DWORD dx,dy;
|
DWORD dx,dy;
|
||||||
@@ -2288,7 +2288,7 @@ if(!hsh_initialized){
|
|||||||
size = m_Textures[11]->Size ();
|
size = m_Textures[11]->Size ();
|
||||||
color = Color ();
|
color = Color ();
|
||||||
m_Textures[11]->Draw (Point3D (400.0f,44.0f,0.9f),size,color);
|
m_Textures[11]->Draw (Point3D (400.0f,44.0f,0.9f),size,color);
|
||||||
//Aux2 center indicator.. inverted triangle.. (very small)
|
//2번 aux 중심표시.. 역삼각형..(매우작음)
|
||||||
|
|
||||||
if (m_NavPointRange != -1)
|
if (m_NavPointRange != -1)
|
||||||
{
|
{
|
||||||
@@ -2299,9 +2299,9 @@ if(!hsh_initialized){
|
|||||||
textloc.y = 0;
|
textloc.y = 0;
|
||||||
textloc.z = 0;
|
textloc.z = 0;
|
||||||
// Draw navpoint bug or arrows
|
// Draw navpoint bug or arrows
|
||||||
//Aux2 navigation
|
//2번 aux navigation
|
||||||
//navpoint: draw circle indicating objective (when displayable in ruler)
|
//navpoint bug:... 목표를 나타내는 동그라미를 발한다.(ruler안에 표시가능할때)
|
||||||
//When unable to display in arrow ruler.. show direction with left/right arrow only.
|
//arrow ruler안에 표시가 불가능할때.. 방향만 좌/우 화살표로서 표시한다.
|
||||||
DWORD color = (m_NavAlpha << 24) + 0x00AF00;
|
DWORD color = (m_NavAlpha << 24) + 0x00AF00;
|
||||||
|
|
||||||
size = Size ();
|
size = Size ();
|
||||||
@@ -2346,7 +2346,7 @@ if(!hsh_initialized){
|
|||||||
textloc.y += 5;
|
textloc.y += 5;
|
||||||
textloc.z = 0.9f;
|
textloc.z = 0.9f;
|
||||||
}
|
}
|
||||||
//Draw the name of the point target.
|
//지점 타켓의 이름을 그린다.
|
||||||
DWORD dx,dy;
|
DWORD dx,dy;
|
||||||
navPointName->TopLeft (textloc.x-50.0f,textloc.y-2.0f);
|
navPointName->TopLeft (textloc.x-50.0f,textloc.y-2.0f);
|
||||||
navPointName->BottomRight (textloc.x+50.0f,textloc.y+20.0f);
|
navPointName->BottomRight (textloc.x+50.0f,textloc.y+20.0f);
|
||||||
@@ -2357,7 +2357,7 @@ if(!hsh_initialized){
|
|||||||
navPointName->Draw (textloc);
|
navPointName->Draw (textloc);
|
||||||
textloc.x += dx/2;
|
textloc.x += dx/2;
|
||||||
|
|
||||||
//Draw distance to point target.
|
//지점 타켓의 거리를 그린다.
|
||||||
textloc.y += 12.0f;
|
textloc.y += 12.0f;
|
||||||
navPointName->TopLeft (textloc.x-50.0f,textloc.y-2.0f);
|
navPointName->TopLeft (textloc.x-50.0f,textloc.y-2.0f);
|
||||||
navPointName->BottomRight (textloc.x+50.0f,textloc.y+20.0f);
|
navPointName->BottomRight (textloc.x+50.0f,textloc.y+20.0f);
|
||||||
@@ -2503,7 +2503,7 @@ if(!hsh_initialized){
|
|||||||
if(VehGetShutdownState()!=1)
|
if(VehGetShutdownState()!=1)
|
||||||
{
|
{
|
||||||
mfd_device.DrawTexture(120,140,0xFFFFFFFF,testoffset+1,256,testoffset+402+1,256+18);
|
mfd_device.DrawTexture(120,140,0xFFFFFFFF,testoffset+1,256,testoffset+402+1,256+18);
|
||||||
//Draw bearing above tick marks
|
//눈금위의 방위각 그리기
|
||||||
int heading = m_PlayerFacing;
|
int heading = m_PlayerFacing;
|
||||||
int ii=0;
|
int ii=0;
|
||||||
for (int i=heading-20;i<=heading+20;i++,ii++){
|
for (int i=heading-20;i<=heading+20;i++,ii++){
|
||||||
@@ -2521,7 +2521,7 @@ if(!hsh_initialized){
|
|||||||
}
|
}
|
||||||
|
|
||||||
mfd_device.pD3DDevice->SetTexture(0,0);
|
mfd_device.pD3DDevice->SetTexture(0,0);
|
||||||
//Draw current bearing
|
//현재 방위각 그리기
|
||||||
{
|
{
|
||||||
char text[8];
|
char text[8];
|
||||||
wsprintf(text,"%d",(int)m_PlayerFacing);
|
wsprintf(text,"%d",(int)m_PlayerFacing);
|
||||||
@@ -2530,19 +2530,19 @@ if(!hsh_initialized){
|
|||||||
}
|
}
|
||||||
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSTexture);
|
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSTexture);
|
||||||
|
|
||||||
//Draw center-indicator inverted triangle (very small)
|
//중심표시 역삼각형(매우작음) 그리기
|
||||||
mfd_device.DrawTexture(320-5,140,0xFFFFFFFF,59,30+256,70,39+256);
|
mfd_device.DrawTexture(320-5,140,0xFFFFFFFF,59,30+256,70,39+256);
|
||||||
|
|
||||||
//Draw objective.
|
//목표 그리기.
|
||||||
if (m_NavPointRange != -1){//when a target waypoint exists.
|
if (m_NavPointRange != -1){//목표 지점이 있을때.
|
||||||
int hsh_textpos=0;
|
int hsh_textpos=0;
|
||||||
//Draw objective indicator.
|
//목표 표시 그리기.
|
||||||
if ((m_NavPointFacing > -20) && (m_NavPointFacing < 20)){
|
if ((m_NavPointFacing > -20) && (m_NavPointFacing < 20)){
|
||||||
//When inside bearing range.. draw indicator.
|
//방위각 내에 있을때.. 버그를 그린다.
|
||||||
mfd_device.DrawTexture((int)(320-9-m_NavPointFacing*10),140+4,0xFFFFFFFF,87,28+256,106,47+256);
|
mfd_device.DrawTexture((int)(320-9-m_NavPointFacing*10),140+4,0xFFFFFFFF,87,28+256,106,47+256);
|
||||||
hsh_textpos=(int)(320-m_NavPointFacing*10);
|
hsh_textpos=(int)(320-m_NavPointFacing*10);
|
||||||
}else{
|
}else{
|
||||||
//When outside bearing range.. draw arrow.
|
//방위각 밖에 있을때.. 화살표를 그린다.
|
||||||
if (m_NavPointFacing <= -10){
|
if (m_NavPointFacing <= -10){
|
||||||
mfd_device.DrawTexture(520+4,140,0xFFFFFFFF,3,54+256,39,81+256);
|
mfd_device.DrawTexture(520+4,140,0xFFFFFFFF,3,54+256,39,81+256);
|
||||||
hsh_textpos=520;
|
hsh_textpos=520;
|
||||||
@@ -2552,12 +2552,12 @@ if(!hsh_initialized){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw objective name and distance (text).
|
//목표 이름과 거리(텍스트) 그리기.
|
||||||
mfd_device.pFont[0].DrawText(hsh_textpos,140+26,0xFFFFFFFF,m_NavPointName,TEXTALIGN_CENTER);
|
mfd_device.pFont[0].DrawText(hsh_textpos,140+26,0xFFFFFFFF,m_NavPointName,TEXTALIGN_CENTER);
|
||||||
mfd_device.pFont[0].DrawText(hsh_textpos,140+46,0xFFFFFFFF,m_NavPointRangeText,TEXTALIGN_CENTER);
|
mfd_device.pFont[0].DrawText(hsh_textpos,140+46,0xFFFFFFFF,m_NavPointRangeText,TEXTALIGN_CENTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Must add routine to draw score info here..
|
//반드시.. scroe정보 그리는 루틴을 추가할것..
|
||||||
{
|
{
|
||||||
char score[32]={0};
|
char score[32]={0};
|
||||||
char kills[32]={0};
|
char kills[32]={0};
|
||||||
|
|||||||
@@ -51,9 +51,9 @@ namespace MechWarrior4
|
|||||||
Stuff::Scalar m_TorsoTwist;
|
Stuff::Scalar m_TorsoTwist;
|
||||||
int m_RadarMode;
|
int m_RadarMode;
|
||||||
stlport::vector<ShotEntry> m_ShotList;
|
stlport::vector<ShotEntry> m_ShotList;
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
int hsh_fdraw;
|
int hsh_fdraw;
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
bool OnShotList (ObjectID who);
|
bool OnShotList (ObjectID who);
|
||||||
void ClipLine (Scalar& xpt1,Scalar& ypt1,Scalar& xpt2,Scalar& ypt2,Scalar cx,Scalar cy,Scalar rad);
|
void ClipLine (Scalar& xpt1,Scalar& ypt1,Scalar& xpt2,Scalar& ypt2,Scalar cx,Scalar cy,Scalar rad);
|
||||||
|
|
||||||
|
|||||||
@@ -121,7 +121,7 @@
|
|||||||
void InitComFuncs (void);
|
void InitComFuncs (void);
|
||||||
void KillComFuncs (void);
|
void KillComFuncs (void);
|
||||||
|
|
||||||
// hyun begin
|
// úè - start
|
||||||
typedef long LONG;
|
typedef long LONG;
|
||||||
typedef struct DIJOYSTATE {
|
typedef struct DIJOYSTATE {
|
||||||
LONG lX;
|
LONG lX;
|
||||||
@@ -141,7 +141,7 @@ extern void (__stdcall *g_pfnRIO_ButtonEvent)(BYTE* by);
|
|||||||
extern void __stdcall RIO_Joy(DIJOYSTATE& js);
|
extern void __stdcall RIO_Joy(DIJOYSTATE& js);
|
||||||
extern void __stdcall RIO_ButEvent(BYTE* by);
|
extern void __stdcall RIO_ButEvent(BYTE* by);
|
||||||
|
|
||||||
// hyun end
|
// úè - end
|
||||||
|
|
||||||
namespace MW4AI
|
namespace MW4AI
|
||||||
{
|
{
|
||||||
@@ -200,13 +200,13 @@ Stuff::Scalar MechWarrior4::DECRYPT (Stuff::Scalar value)
|
|||||||
void
|
void
|
||||||
MechWarrior4::InitializeClasses(Stuff::NotationFile *startup_ini)
|
MechWarrior4::InitializeClasses(Stuff::NotationFile *startup_ini)
|
||||||
{
|
{
|
||||||
// hyun begin
|
// úè - start
|
||||||
if (g_bUseOrgJoy)
|
if (g_bUseOrgJoy)
|
||||||
g_pfnRIO_Joy = NULL;
|
g_pfnRIO_Joy = NULL;
|
||||||
else
|
else
|
||||||
g_pfnRIO_Joy = RIO_Joy;
|
g_pfnRIO_Joy = RIO_Joy;
|
||||||
g_pfnRIO_ButtonEvent = RIO_ButEvent;
|
g_pfnRIO_ButtonEvent = RIO_ButEvent;
|
||||||
// hyun end
|
// úè - end
|
||||||
|
|
||||||
Verify(!g_LibraryHeap);
|
Verify(!g_LibraryHeap);
|
||||||
g_LibraryHeap = gos_CreateMemoryHeap("MechWarrior4(All)");
|
g_LibraryHeap = gos_CreateMemoryHeap("MechWarrior4(All)");
|
||||||
@@ -753,8 +753,8 @@ void
|
|||||||
gos_DestroyMemoryHeap(g_LibraryHeap);
|
gos_DestroyMemoryHeap(g_LibraryHeap);
|
||||||
g_LibraryHeap = NULL;
|
g_LibraryHeap = NULL;
|
||||||
|
|
||||||
// hyun begin
|
// úè - start
|
||||||
g_pfnRIO_ButtonEvent = NULL;
|
g_pfnRIO_ButtonEvent = NULL;
|
||||||
g_pfnRIO_Joy = NULL;
|
g_pfnRIO_Joy = NULL;
|
||||||
// hyun end
|
// úè - end
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12980,10 +12980,10 @@ void CTCL_API CTCL_SetMissionParams()
|
|||||||
//}
|
//}
|
||||||
NetMissionParameters::MWNetMissionParameters* lparams = app->GetLocalNetParams();
|
NetMissionParameters::MWNetMissionParameters* lparams = app->GetLocalNetParams();
|
||||||
|
|
||||||
lparams->m_killLimit = 0; // no kill limit - target value
|
lparams->m_killLimit = 0; // no kill limit - 목표치
|
||||||
lparams->m_killLimitNumber = 0;
|
lparams->m_killLimitNumber = 0;
|
||||||
lparams->m_respawnLimit = 0; // apply a respawn limit?
|
lparams->m_respawnLimit = 0; // 생명제한을 둘 것인가?
|
||||||
lparams->m_respawnLimitNumber = 0; // number of lives
|
lparams->m_respawnLimitNumber = 0; // 생명수
|
||||||
//params->m_isNight = params.m_isNight;
|
//params->m_isNight = params.m_isNight;
|
||||||
lparams->m_onlyStockMech = FALSE;
|
lparams->m_onlyStockMech = FALSE;
|
||||||
lparams->m_playMissionReview = 0; // params.m_playMissionReview;
|
lparams->m_playMissionReview = 0; // params.m_playMissionReview;
|
||||||
@@ -13250,7 +13250,7 @@ void CTCL_API CTCL_CheckServerReady()
|
|||||||
int i, nOK, nCount = Network::GetInstance()->GetPlayerCount();
|
int i, nOK, nCount = Network::GetInstance()->GetPlayerCount();
|
||||||
|
|
||||||
BOOL bOK = FALSE;
|
BOOL bOK = FALSE;
|
||||||
if (nCount == (g_nTeslas + 1)) { // when all clients are connected...
|
if (nCount == (g_nTeslas + 1)) { // 모든 클라이언트가 접속이 되어 있을 때...
|
||||||
for(nOK = 0, i = 0; i < Maximum_Players; ++i) {
|
for(nOK = 0, i = 0; i < Maximum_Players; ++i) {
|
||||||
if (i != Connection::Server->GetID()) {
|
if (i != Connection::Server->GetID()) {
|
||||||
const MechWarrior4::ServedConnectionData& scd = app->servedConnectionData[i];
|
const MechWarrior4::ServedConnectionData& scd = app->servedConnectionData[i];
|
||||||
@@ -13316,10 +13316,9 @@ void CTCL_API CTCL_DefaultHostSetup(int nMode)
|
|||||||
params->m_maxBots = 8;
|
params->m_maxBots = 8;
|
||||||
//}
|
//}
|
||||||
} else {
|
} else {
|
||||||
params->m_maxPlayers = 31; // 31: max that fits in 5-bit bitstream (0-31)
|
params->m_maxPlayers = 16;
|
||||||
Environment.NetworkMaxPlayers = 31;
|
Environment.NetworkMaxPlayers = 16;
|
||||||
params->m_maxBots = 31;
|
params->m_maxBots = 16;
|
||||||
gos_NetServerCommands(gos_Commend_UpdateMaxPlayers, 0); // push the updated limit to the live DirectPlay session
|
|
||||||
}
|
}
|
||||||
params->m_allow3rdPerson = 1;
|
params->m_allow3rdPerson = 1;
|
||||||
if ((nMode != 0) && (nMode != 4)) {
|
if ((nMode != 0) && (nMode != 4)) {
|
||||||
@@ -14821,10 +14820,6 @@ void __stdcall CTCL_UpdateMechView()
|
|||||||
mfd_device.BeginScene();
|
mfd_device.BeginScene();
|
||||||
sh_step = 4;
|
sh_step = 4;
|
||||||
break;
|
break;
|
||||||
case 4:
|
|
||||||
// Same 7-step cadence as mode 1.
|
|
||||||
sh_step = 6;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -230,13 +230,13 @@ extern int g_nTeamOrderMode;
|
|||||||
extern bool g_bCOOP; // COin OPeration
|
extern bool g_bCOOP; // COin OPeration
|
||||||
// jcem - end
|
// jcem - end
|
||||||
|
|
||||||
// hyun begin
|
// 鉉 - start
|
||||||
extern void __stdcall RIO_StartStop (BOOL bStart);
|
extern void __stdcall RIO_StartStop (BOOL bStart);
|
||||||
void COOP_InputMode(bool bRestore);
|
void COOP_InputMode(bool bRestore);
|
||||||
extern int g_bNoPlasma;
|
extern int g_bNoPlasma;
|
||||||
extern void __stdcall PLASMA_Do(int nMode);
|
extern void __stdcall PLASMA_Do(int nMode);
|
||||||
extern void GeneralReset();
|
extern void GeneralReset();
|
||||||
// hyun end
|
// 鉉 - end
|
||||||
|
|
||||||
extern bool __stdcall gos_NetDoneStartGame();
|
extern bool __stdcall gos_NetDoneStartGame();
|
||||||
extern bool __stdcall PrepareDefaultServerAdvertisers(void);
|
extern bool __stdcall PrepareDefaultServerAdvertisers(void);
|
||||||
@@ -808,8 +808,8 @@ void NetMissionParameters::MWNetMissionParameters::SaveParameters(DynamicMemoryS
|
|||||||
stream->WriteBits(&m_pureMapCycle,1);
|
stream->WriteBits(&m_pureMapCycle,1);
|
||||||
|
|
||||||
|
|
||||||
stream->WriteBits(&m_maxPlayers, 5); // max 31 players
|
stream->WriteBits(&m_maxPlayers, 5); // 16 players maximum
|
||||||
stream->WriteBits(&m_maxBots, 5); // max 31
|
stream->WriteBits(&m_maxBots, 5); // 16 players maximum
|
||||||
stream->WriteBits(&m_mapID, 16); // 65535 maps available
|
stream->WriteBits(&m_mapID, 16); // 65535 maps available
|
||||||
stream->WriteBits(&m_mapClientCRC, 64);
|
stream->WriteBits(&m_mapClientCRC, 64);
|
||||||
|
|
||||||
@@ -927,8 +927,8 @@ void NetMissionParameters::MWNetMissionParameters::LoadParameters(MemoryStream *
|
|||||||
stream->ReadBits(&m_useMapCycle,1);
|
stream->ReadBits(&m_useMapCycle,1);
|
||||||
stream->ReadBits(&m_pureMapCycle,1);
|
stream->ReadBits(&m_pureMapCycle,1);
|
||||||
|
|
||||||
stream->ReadBits(&m_maxPlayers, 5); // max 31 players
|
stream->ReadBits(&m_maxPlayers, 5); // 16 players max
|
||||||
stream->ReadBits(&m_maxBots, 5); // max 31
|
stream->ReadBits(&m_maxBots, 5); // 16 players max
|
||||||
stream->ReadBits(&m_mapID, 16); // 65535 maps available
|
stream->ReadBits(&m_mapID, 16); // 65535 maps available
|
||||||
stream->ReadBits(&m_mapClientCRC, 64);
|
stream->ReadBits(&m_mapClientCRC, 64);
|
||||||
|
|
||||||
@@ -1938,9 +1938,9 @@ public:
|
|||||||
void EndPos (DWORD& x,DWORD& y);
|
void EndPos (DWORD& x,DWORD& y);
|
||||||
bool Empty (void)
|
bool Empty (void)
|
||||||
{ return (m_Text[0] == 0); }
|
{ return (m_Text[0] == 0); }
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
const char *hsh_get_m_Text(){return &m_Text[0];}
|
const char *hsh_get_m_Text(){return &m_Text[0];}
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
};
|
};
|
||||||
|
|
||||||
TextBox::TextBox (const char* pcszFontName, int nFontSize/* = -11*/, bool oldmode/* = false*/)
|
TextBox::TextBox (const char* pcszFontName, int nFontSize/* = -11*/, bool oldmode/* = false*/)
|
||||||
@@ -3571,9 +3571,9 @@ void
|
|||||||
}
|
}
|
||||||
Environment.DoGameLogic = &MWApplication::DoGameLogic;
|
Environment.DoGameLogic = &MWApplication::DoGameLogic;
|
||||||
}
|
}
|
||||||
// hyun begin
|
// 鉉 - start
|
||||||
RIO_StartStop (TRUE);
|
RIO_StartStop (TRUE);
|
||||||
// hyun end
|
// 鉉 - end
|
||||||
|
|
||||||
g_MRF.Started(); // jcem
|
g_MRF.Started(); // jcem
|
||||||
g_RSF.Started(); // jcem
|
g_RSF.Started(); // jcem
|
||||||
@@ -3696,9 +3696,9 @@ void
|
|||||||
g_RSF.Stopping(); // jcem
|
g_RSF.Stopping(); // jcem
|
||||||
|
|
||||||
ClearTOC();
|
ClearTOC();
|
||||||
// hyun begin
|
// 鉉 - start
|
||||||
RIO_StartStop (FALSE);
|
RIO_StartStop (FALSE);
|
||||||
// hyun end
|
// 鉉 - end
|
||||||
if (CTCL_IsConsoleX()) {
|
if (CTCL_IsConsoleX()) {
|
||||||
CTCL_SetGameState(_EGS_Closing);
|
CTCL_SetGameState(_EGS_Closing);
|
||||||
}
|
}
|
||||||
@@ -3870,9 +3870,9 @@ sh_game_started = false;
|
|||||||
g_RSF.Stopping(); // jcem
|
g_RSF.Stopping(); // jcem
|
||||||
|
|
||||||
ClearTOC();
|
ClearTOC();
|
||||||
// hyun begin
|
// 鉉 - start
|
||||||
RIO_StartStop (FALSE);
|
RIO_StartStop (FALSE);
|
||||||
// hyun end
|
// 鉉 - end
|
||||||
if (CTCL_IsConsoleX()) {
|
if (CTCL_IsConsoleX()) {
|
||||||
CTCL_SetGameState(_EGS_Closing);
|
CTCL_SetGameState(_EGS_Closing);
|
||||||
}
|
}
|
||||||
@@ -18435,7 +18435,7 @@ int __stdcall CTCL_StartCOOP(void* instance, int args, void* data[])
|
|||||||
// $$COOP: see void CSOC_Client::OnReadyStartGame()
|
// $$COOP: see void CSOC_Client::OnReadyStartGame()
|
||||||
// C_ReadyStartGame
|
// C_ReadyStartGame
|
||||||
|
|
||||||
g_nTeslas = 0; // single player game
|
g_nTeslas = 0; // 싱글 게임
|
||||||
g_nBOTs = 7;
|
g_nBOTs = 7;
|
||||||
g_nPlayerInfos = 1 + g_nBOTs + g_nTeslas;
|
g_nPlayerInfos = 1 + g_nBOTs + g_nTeslas;
|
||||||
g_bIsServer = TRUE;
|
g_bIsServer = TRUE;
|
||||||
@@ -18523,13 +18523,13 @@ int __stdcall CTCL_StartCOOP(void* instance, int args, void* data[])
|
|||||||
// MSL ADD MECH
|
// MSL ADD MECH
|
||||||
PI.m_nMechIndex = -1;
|
PI.m_nMechIndex = -1;
|
||||||
//*
|
//*
|
||||||
// See MechIndex for each mech's info
|
// 각 메크에 대한 정보는 MechIndex를 참조함
|
||||||
PI.m_fileID = 0;
|
PI.m_fileID = 0;
|
||||||
PI.m_recordID = 0;
|
PI.m_recordID = 0;
|
||||||
strcpy(PI.m_szMech, s_paMechNames[11]); // Madcat
|
strcpy(PI.m_szMech, s_paMechNames[11]); // Madcat
|
||||||
strcpy(PI.m_szMech, "$Yellow");
|
strcpy(PI.m_szMech, "$Yellow");
|
||||||
//*/
|
//*/
|
||||||
PI.m_nTeamOrSkin = 1; // red
|
PI.m_nTeamOrSkin = 1; // 빨강
|
||||||
PI.m_nDecal = 1; // nDecal;
|
PI.m_nDecal = 1; // nDecal;
|
||||||
PI.m_dwAddr = 0; // dwAddr;
|
PI.m_dwAddr = 0; // dwAddr;
|
||||||
g_nPrintOut = FALSE;
|
g_nPrintOut = FALSE;
|
||||||
@@ -18576,7 +18576,7 @@ int __stdcall CTCL_StartCOOP(void* instance, int args, void* data[])
|
|||||||
strcpy(PI.m_szName, s_pNames[aLBN[2][i - 1]]);
|
strcpy(PI.m_szName, s_pNames[aLBN[2][i - 1]]);
|
||||||
PI.m_nMechIndex = -1;
|
PI.m_nMechIndex = -1;
|
||||||
//*
|
//*
|
||||||
//See MechIndex for each mech's info
|
//각 메크에 대한 정보는 MechIndex를 참조함
|
||||||
PI.m_fileID = 0;
|
PI.m_fileID = 0;
|
||||||
PI.m_recordID = 0;
|
PI.m_recordID = 0;
|
||||||
/*if (i == 1)
|
/*if (i == 1)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#include "MW4Headers.hpp"
|
#include "MW4Headers.hpp"
|
||||||
|
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
#include "MWVideoRenderer.hpp"
|
#include "MWVideoRenderer.hpp"
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
#include "MWGUIManager.hpp"
|
#include "MWGUIManager.hpp"
|
||||||
#include "GUIWeaponManager.hpp"
|
#include "GUIWeaponManager.hpp"
|
||||||
#include "GUIRadarManager.hpp"
|
#include "GUIRadarManager.hpp"
|
||||||
@@ -1554,7 +1554,7 @@ void MWGUIManager::RenderComponents (void)
|
|||||||
(*iter)->Draw ();
|
(*iter)->Draw ();
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
//sanghoon: while shutting down..
|
//상훈... 셧다운 중일때..
|
||||||
for (iter = m_Components.begin ();iter != m_Components.end ();iter++)
|
for (iter = m_Components.begin ();iter != m_Components.end ();iter++)
|
||||||
{
|
{
|
||||||
//Main hudZoom,//hudReticle,hudObjective,hudTorsoBar,hudHelp,hudScore
|
//Main hudZoom,//hudReticle,hudObjective,hudTorsoBar,hudHelp,hudScore
|
||||||
@@ -1597,11 +1597,11 @@ void MWGUIManager::RenderComponents (void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//sanghoon begin
|
//상훈-앞
|
||||||
extern CamerashipParams g_CamerashipParams;
|
extern CamerashipParams g_CamerashipParams;
|
||||||
if (CTCL_IsConsoleX() || g_CamerashipParams.m_bAllowChatDisplay)
|
if (CTCL_IsConsoleX() || g_CamerashipParams.m_bAllowChatDisplay)
|
||||||
hudChat->Draw (true);
|
hudChat->Draw (true);
|
||||||
//sanghoon end
|
//상훈-뒤
|
||||||
hudScore->Draw (true);
|
hudScore->Draw (true);
|
||||||
hudCamera->Draw(true);
|
hudCamera->Draw(true);
|
||||||
}
|
}
|
||||||
@@ -1612,7 +1612,7 @@ void MWGUIManager::RenderComponents (void)
|
|||||||
gos_PopRenderStates ();
|
gos_PopRenderStates ();
|
||||||
|
|
||||||
|
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
MWApplication* app = MWApplication::GetInstance();
|
MWApplication* app = MWApplication::GetInstance();
|
||||||
if (app->networkingFlag)
|
if (app->networkingFlag)
|
||||||
{
|
{
|
||||||
@@ -1648,7 +1648,7 @@ void MWGUIManager::RenderComponents (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
}
|
}
|
||||||
|
|
||||||
void MWGUIManager::ShowHelpArrow (bool value)
|
void MWGUIManager::ShowHelpArrow (bool value)
|
||||||
|
|||||||
@@ -590,7 +590,7 @@ namespace MechWarrior4
|
|||||||
return (m_EndMissionTimer.Running());
|
return (m_EndMissionTimer.Running());
|
||||||
}
|
}
|
||||||
|
|
||||||
//sanghoon
|
//상훈
|
||||||
Stuff::Scalar GetMissionDuration ()
|
Stuff::Scalar GetMissionDuration ()
|
||||||
{
|
{
|
||||||
if (!m_EndMissionTimer.Running ())
|
if (!m_EndMissionTimer.Running ())
|
||||||
|
|||||||
@@ -3954,7 +3954,7 @@ void
|
|||||||
g_HUDPPCLevel = 10;
|
g_HUDPPCLevel = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
//sanghoon
|
//상훈
|
||||||
//extern bool sh_isdeathmode;
|
//extern bool sh_isdeathmode;
|
||||||
//Are we ejecting?
|
//Are we ejecting?
|
||||||
if (m_NeedEject)
|
if (m_NeedEject)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
|
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
|
||||||
//===========================================================================//
|
//===========================================================================//
|
||||||
|
|
||||||
// hyun begin
|
// 鉉 - start
|
||||||
#include "MW4.hpp"
|
#include "MW4.hpp"
|
||||||
#include "Vehicle.hpp"
|
#include "Vehicle.hpp"
|
||||||
#include "MechAnimationState.hpp"
|
#include "MechAnimationState.hpp"
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
#include "SpringOf.hpp"
|
#include "SpringOf.hpp"
|
||||||
#include "MechLabHeaders.h"
|
#include "MechLabHeaders.h"
|
||||||
#include <Stuff\Spline.hpp>
|
#include <Stuff\Spline.hpp>
|
||||||
// hyun end
|
// 鉉 - end
|
||||||
|
|
||||||
|
|
||||||
#include "MW4Headers.hpp"
|
#include "MW4Headers.hpp"
|
||||||
@@ -65,9 +65,9 @@
|
|||||||
#include "EyePointManager.hpp"
|
#include "EyePointManager.hpp"
|
||||||
#include "mw4shell.hpp"
|
#include "mw4shell.hpp"
|
||||||
#include "NavPoint.hpp"
|
#include "NavPoint.hpp"
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
#include "MWVideoRenderer.hpp"
|
#include "MWVideoRenderer.hpp"
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
|
|
||||||
#include <Adept\CollisionGrid.hpp>
|
#include <Adept\CollisionGrid.hpp>
|
||||||
#include <Adept\Controls.hpp>
|
#include <Adept\Controls.hpp>
|
||||||
@@ -101,7 +101,7 @@ bool _stdcall WriteImageAfterGrab(BYTE* Image, const char* pcszFilePrefix);
|
|||||||
#include <mbstring.h>
|
#include <mbstring.h>
|
||||||
#define __mbsrchr(s,c) (char*)_mbsrchr((const unsigned char*)(s),(c))
|
#define __mbsrchr(s,c) (char*)_mbsrchr((const unsigned char*)(s),(c))
|
||||||
|
|
||||||
// hyun begin
|
// 鉉 - start
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#include "ctcls.h"
|
#include "ctcls.h"
|
||||||
@@ -208,7 +208,7 @@ float g_fNeedFlushLevel = 0.66;
|
|||||||
float g_fTimeMsgSender = 1.5f;
|
float g_fTimeMsgSender = 1.5f;
|
||||||
float g_fTimeScoringAtEnd = 10.0f;
|
float g_fTimeScoringAtEnd = 10.0f;
|
||||||
Mech* FindNextMechToFollowByScore(Mech* pCur); // jcem
|
Mech* FindNextMechToFollowByScore(Mech* pCur); // jcem
|
||||||
// hyun end
|
// 鉉 - end
|
||||||
|
|
||||||
CamerashipParams g_CamerashipParams;
|
CamerashipParams g_CamerashipParams;
|
||||||
|
|
||||||
@@ -2285,7 +2285,7 @@ void
|
|||||||
if (MWGUIManager::GetInstance () && IsObserving(true))
|
if (MWGUIManager::GetInstance () && IsObserving(true))
|
||||||
{
|
{
|
||||||
Check_Object(MWGUIManager::GetInstance());
|
Check_Object(MWGUIManager::GetInstance());
|
||||||
//sanghoon
|
//상훈
|
||||||
if (!CTCL_IsConsoleX() && !g_CamerashipParams.m_bAllowChatDisplay) {
|
if (!CTCL_IsConsoleX() && !g_CamerashipParams.m_bAllowChatDisplay) {
|
||||||
HUDChat *chat;
|
HUDChat *chat;
|
||||||
chat = Cast_Object (HUDChat *,MWGUIManager::GetInstance ()->Component (MWGUIManager::HUD_CHAT));
|
chat = Cast_Object (HUDChat *,MWGUIManager::GetInstance ()->Component (MWGUIManager::HUD_CHAT));
|
||||||
@@ -3781,11 +3781,11 @@ void VehicleInterface::ApplyControls(Time till)
|
|||||||
}
|
}
|
||||||
else if (controlPacket.lookCommand == AnalogControlSave::LookBack)
|
else if (controlPacket.lookCommand == AnalogControlSave::LookBack)
|
||||||
{
|
{
|
||||||
//sanghoon
|
//상훈
|
||||||
ShowHUDIfOn(true);
|
ShowHUDIfOn(true);
|
||||||
//MWGUIManager::GetInstance()->HideHudComponent (HUD_TARGETARROW);
|
//MWGUIManager::GetInstance()->HideHudComponent (HUD_TARGETARROW);
|
||||||
//ShowHUDIfOn(false);
|
//ShowHUDIfOn(false);
|
||||||
//sanghoon
|
//상훈
|
||||||
// MSL 5.04 Rear Firing Weapons
|
// MSL 5.04 Rear Firing Weapons
|
||||||
// ShowStatic(cameraView == InMechCameraView);
|
// ShowStatic(cameraView == InMechCameraView);
|
||||||
ShowStatic(true);
|
ShowStatic(true);
|
||||||
@@ -4968,7 +4968,7 @@ void
|
|||||||
Scalar fT = gos_GetElapsedTime();
|
Scalar fT = gos_GetElapsedTime();
|
||||||
if ((fT - g_fLastScoringTimeCechk) >= CAMERASHIP_SCORING_CHECK) {
|
if ((fT - g_fLastScoringTimeCechk) >= CAMERASHIP_SCORING_CHECK) {
|
||||||
g_fLastScoringTimeCechk = fT;
|
g_fLastScoringTimeCechk = fT;
|
||||||
//sanghoon
|
//상훈
|
||||||
if (Application::GetInstance()->networkingFlag)
|
if (Application::GetInstance()->networkingFlag)
|
||||||
{
|
{
|
||||||
bool bNearEnd = false;
|
bool bNearEnd = false;
|
||||||
@@ -5378,7 +5378,7 @@ again:
|
|||||||
if ((m_curView == STATE_DEATH_SEQUENCE_START) || (m_curView == STATE_DEATH_SEQUENCE_TRANS)) {
|
if ((m_curView == STATE_DEATH_SEQUENCE_START) || (m_curView == STATE_DEATH_SEQUENCE_TRANS)) {
|
||||||
bool bStateEnded = false;
|
bool bStateEnded = false;
|
||||||
if (m_pMechDying != pMech) {
|
if (m_pMechDying != pMech) {
|
||||||
// Case where target changes while dying
|
// 죽는 도중에 타겟이 바뀐 경우
|
||||||
ClearFixedPoint();
|
ClearFixedPoint();
|
||||||
m_fTimeStateEnd = fMT + g_CamerashipParams.m_fTimeStandard;
|
m_fTimeStateEnd = fMT + g_CamerashipParams.m_fTimeStandard;
|
||||||
m_pMechDying = m_pEnemy = NULL;
|
m_pMechDying = m_pEnemy = NULL;
|
||||||
@@ -5419,7 +5419,7 @@ again:
|
|||||||
}
|
}
|
||||||
if ((m_pEnemy != m_pMechDying) && m_pEnemy->IsDestroyed()) {
|
if ((m_pEnemy != m_pMechDying) && m_pEnemy->IsDestroyed()) {
|
||||||
if (m_curView == STATE_DEATH_SEQUENCE_START) {
|
if (m_curView == STATE_DEATH_SEQUENCE_START) {
|
||||||
// Case where opponent dies while death animation is playing...
|
// 죽음을 보여주는 도중에 상대방이 죽은 경우...
|
||||||
// move to trans...
|
// move to trans...
|
||||||
bStateEnded = true;
|
bStateEnded = true;
|
||||||
}
|
}
|
||||||
@@ -7495,7 +7495,7 @@ void
|
|||||||
// MSL 5.02 Zoom
|
// MSL 5.02 Zoom
|
||||||
// m_reticuleCamera->SetPerspective(near_clip_zoom, far_clip_main + (100.0f * (horizontal_fov_main - horizontal_fov_zoom)), horizontal_fov_zoom, (height_to_width_zoom));
|
// m_reticuleCamera->SetPerspective(near_clip_zoom, far_clip_main + (100.0f * (horizontal_fov_main - horizontal_fov_zoom)), horizontal_fov_zoom, (height_to_width_zoom));
|
||||||
m_reticuleCamera->SetPerspective(near_clip_zoom, far_clip_main + (100.0f * (horizontal_fov_main - horizontal_fov_zoom)), horizontal_fov_zoom, (height_to_width_zoom*1.75));
|
m_reticuleCamera->SetPerspective(near_clip_zoom, far_clip_main + (100.0f * (horizontal_fov_main - horizontal_fov_zoom)), horizontal_fov_zoom, (height_to_width_zoom*1.75));
|
||||||
//sanghoon
|
//상훈
|
||||||
// float height=(1-g_fZoomMarginLR*2)*800 * height_to_width_zoom/600;
|
// float height=(1-g_fZoomMarginLR*2)*800 * height_to_width_zoom/600;
|
||||||
// float tb_margin=(1-height)/2;
|
// float tb_margin=(1-height)/2;
|
||||||
// m_reticuleCamera->SetViewport(1-g_fZoomMarginLR,1-tb_margin, g_fZoomMarginLR, tb_margin);
|
// m_reticuleCamera->SetViewport(1-g_fZoomMarginLR,1-tb_margin, g_fZoomMarginLR, tb_margin);
|
||||||
@@ -8121,7 +8121,7 @@ void VehicleInterface::ChainFireGroup (Stuff::Time till,ChainIteratorOf<Weapon *
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// hyun begin
|
// 鉉 - start
|
||||||
|
|
||||||
groupWeaponIterator->ReadAndNext();
|
groupWeaponIterator->ReadAndNext();
|
||||||
|
|
||||||
@@ -8135,7 +8135,7 @@ void VehicleInterface::ChainFireGroup (Stuff::Time till,ChainIteratorOf<Weapon *
|
|||||||
BOOL bWeaponGroup3 = (group3FireRequest > 0) && GetWeaponGroupID (*weapon, 3);
|
BOOL bWeaponGroup3 = (group3FireRequest > 0) && GetWeaponGroupID (*weapon, 3);
|
||||||
|
|
||||||
//
|
//
|
||||||
// hyun end
|
// 鉉 - end
|
||||||
//
|
//
|
||||||
|
|
||||||
num_weapons ++;
|
num_weapons ++;
|
||||||
@@ -8369,7 +8369,7 @@ void
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
// fireRequest > 0 (Enter Key : None Used) : hyun
|
// fireRequest > 0 (Enter Key : None Used) : 鉉
|
||||||
if(fireRequest > 0)
|
if(fireRequest > 0)
|
||||||
{
|
{
|
||||||
switch(weaponMode)
|
switch(weaponMode)
|
||||||
@@ -8521,12 +8521,12 @@ void VehicleInterface::OverrideAutoCenterToTorsoMessageHandler(Adept::ReceiverDa
|
|||||||
Verify(message->messageID == OverrideAutoCenterToTorsoMessageID);
|
Verify(message->messageID == OverrideAutoCenterToTorsoMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (28, LAMP_OFF); // hyun
|
g_pRIOMain->SetLampState (28, LAMP_OFF); // 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (28, LAMP_BRIGHT); // hyun
|
g_pRIOMain->SetLampState (28, LAMP_BRIGHT); // 鉉
|
||||||
|
|
||||||
if (perminateTorsoMode == CenterLegsToTorso)
|
if (perminateTorsoMode == CenterLegsToTorso)
|
||||||
{
|
{
|
||||||
@@ -8539,7 +8539,7 @@ void VehicleInterface::OverrideAutoCenterToTorsoMessageHandler(Adept::ReceiverDa
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (28, LAMP_DEFAULT); // hyun
|
g_pRIOMain->SetLampState (28, LAMP_DEFAULT); // 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8658,11 +8658,11 @@ void
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pRIOMain->SetLampState (17, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (17, LAMP_BRIGHT);// 鉉
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (17, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (17, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8749,17 +8749,17 @@ void
|
|||||||
Verify(message->messageID == CrouchCommandMessageID);
|
Verify(message->messageID == CrouchCommandMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (20, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (20, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (20, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (20, LAMP_BRIGHT);// 鉉
|
||||||
// if (executionState->GetState () == ExecutionStateEngine::AutoPilotState)
|
// if (executionState->GetState () == ExecutionStateEngine::AutoPilotState)
|
||||||
executionState->RequestState(ExecutionStateEngine::AlwaysExecuteState);
|
executionState->RequestState(ExecutionStateEngine::AlwaysExecuteState);
|
||||||
QueCommand(VehicleCommand::CrouchCommand);
|
QueCommand(VehicleCommand::CrouchCommand);
|
||||||
} else {
|
} else {
|
||||||
g_pRIOMain->SetLampState (20, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (20, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -8786,10 +8786,10 @@ void
|
|||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
if (g_bJumpZoom)
|
if (g_bJumpZoom)
|
||||||
g_pRIOMain->SetLampState (16, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (16, LAMP_OFF);// 鉉
|
||||||
g_pRIOMain->SetLampState (50, LAMP_OFF);
|
g_pRIOMain->SetLampState (50, LAMP_OFF);
|
||||||
g_pRIOMain->SetLampState (33, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (33, LAMP_OFF);// 鉉
|
||||||
g_pRIOMain->SetLampState (34, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (34, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8797,7 +8797,7 @@ void
|
|||||||
{
|
{
|
||||||
if (GetJumpJetState() > 0) {
|
if (GetJumpJetState() > 0) {
|
||||||
if (g_bJumpZoom)
|
if (g_bJumpZoom)
|
||||||
g_pRIOMain->SetLampState (16, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (16, LAMP_BRIGHT);// 鉉
|
||||||
g_pRIOMain->SetLampState (33, LAMP_BRIGHT);
|
g_pRIOMain->SetLampState (33, LAMP_BRIGHT);
|
||||||
g_pRIOMain->SetLampState (34, LAMP_BRIGHT);
|
g_pRIOMain->SetLampState (34, LAMP_BRIGHT);
|
||||||
}
|
}
|
||||||
@@ -8811,10 +8811,10 @@ void
|
|||||||
if (!GetShutdownState())
|
if (!GetShutdownState())
|
||||||
if (GetJumpJetState() > 0) {
|
if (GetJumpJetState() > 0) {
|
||||||
if (g_bJumpZoom)
|
if (g_bJumpZoom)
|
||||||
g_pRIOMain->SetLampState (16, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (16, LAMP_DEFAULT);// 鉉
|
||||||
g_pRIOMain->SetLampState (50, LAMP_DEFAULT);
|
g_pRIOMain->SetLampState (50, LAMP_DEFAULT);
|
||||||
g_pRIOMain->SetLampState (33, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (33, LAMP_DEFAULT);// 鉉
|
||||||
g_pRIOMain->SetLampState (34, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (34, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9284,12 +9284,12 @@ void
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!GetShutdownState())
|
if (!GetShutdownState())
|
||||||
g_pRIOMain->SetLampState (7, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (7, LAMP_BRIGHT);// 鉉
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!GetShutdownState())
|
if (!GetShutdownState())
|
||||||
g_pRIOMain->SetLampState (7, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (7, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
@@ -9341,7 +9341,7 @@ void
|
|||||||
|
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
//hyun SetWeaponMode(GroupFireMode);
|
//鉉SetWeaponMode(GroupFireMode);
|
||||||
// selectedWeaponGroup = 1;
|
// selectedWeaponGroup = 1;
|
||||||
group1FireRequest ++;
|
group1FireRequest ++;
|
||||||
// fireRequest ++;
|
// fireRequest ++;
|
||||||
@@ -9379,7 +9379,7 @@ void
|
|||||||
|
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
//hyun SetWeaponMode(GroupFireMode);
|
//鉉SetWeaponMode(GroupFireMode);
|
||||||
// selectedWeaponGroup = 2;
|
// selectedWeaponGroup = 2;
|
||||||
group2FireRequest ++;
|
group2FireRequest ++;
|
||||||
// fireRequest ++;
|
// fireRequest ++;
|
||||||
@@ -9415,7 +9415,7 @@ void
|
|||||||
|
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
//hyun SetWeaponMode(GroupFireMode);
|
//鉉SetWeaponMode(GroupFireMode);
|
||||||
// selectedWeaponGroup = 3;
|
// selectedWeaponGroup = 3;
|
||||||
// fireRequest ++;
|
// fireRequest ++;
|
||||||
group3FireRequest ++;
|
group3FireRequest ++;
|
||||||
@@ -9468,7 +9468,7 @@ void
|
|||||||
|
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
//hyun SetWeaponMode(GroupFireMode);
|
//鉉SetWeaponMode(GroupFireMode);
|
||||||
// selectedWeaponGroup = 4;
|
// selectedWeaponGroup = 4;
|
||||||
// fireRequest ++;
|
// fireRequest ++;
|
||||||
// group4FireRequest ++;
|
// group4FireRequest ++;
|
||||||
@@ -9508,7 +9508,7 @@ void
|
|||||||
|
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
//hyun SetWeaponMode(GroupFireMode);
|
//鉉SetWeaponMode(GroupFireMode);
|
||||||
// selectedWeaponGroup = 5;
|
// selectedWeaponGroup = 5;
|
||||||
// fireRequest ++;
|
// fireRequest ++;
|
||||||
// group5FireRequest ++;
|
// group5FireRequest ++;
|
||||||
@@ -9554,7 +9554,7 @@ void
|
|||||||
|
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
//hyun SetWeaponMode(GroupFireMode);
|
//鉉SetWeaponMode(GroupFireMode);
|
||||||
//group6FireRequest ++;
|
//group6FireRequest ++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -10344,19 +10344,19 @@ void
|
|||||||
Verify(message->messageID == ToggleSearchLightMessageID);
|
Verify(message->messageID == ToggleSearchLightMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (27, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (27, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
if (g_SearchLight == TRUE)
|
if (g_SearchLight == TRUE)
|
||||||
g_pRIOMain->SetLampState (27, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (27, LAMP_BRIGHT);// 鉉
|
||||||
QueCommand(VehicleCommand::ToggleSearchLightCommand);
|
QueCommand(VehicleCommand::ToggleSearchLightCommand);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (g_SearchLight == TRUE)
|
if (g_SearchLight == TRUE)
|
||||||
g_pRIOMain->SetLampState (27, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (27, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10546,7 +10546,7 @@ void
|
|||||||
{
|
{
|
||||||
//if (!GetShutdownState())
|
//if (!GetShutdownState())
|
||||||
//if (g_bCool == TRUE) {
|
//if (g_bCool == TRUE) {
|
||||||
// g_pRIOMain->SetLampState (19, LAMP_BRIGHT);// hyun
|
// g_pRIOMain->SetLampState (19, LAMP_BRIGHT);// 鉉
|
||||||
//}
|
//}
|
||||||
|
|
||||||
isCooling ++;
|
isCooling ++;
|
||||||
@@ -10560,7 +10560,7 @@ void
|
|||||||
{
|
{
|
||||||
//if (!GetShutdownState())
|
//if (!GetShutdownState())
|
||||||
//if (g_bCool == TRUE) {
|
//if (g_bCool == TRUE) {
|
||||||
// g_pRIOMain->SetLampState (19, LAMP_DEFAULT);// hyun
|
// g_pRIOMain->SetLampState (19, LAMP_DEFAULT);// 鉉
|
||||||
//}
|
//}
|
||||||
|
|
||||||
isCooling --;
|
isCooling --;
|
||||||
@@ -10734,7 +10734,7 @@ void
|
|||||||
|
|
||||||
if (GetShutdownState())
|
if (GetShutdownState())
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (26, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (26, LAMP_OFF);// 鉉
|
||||||
g_pRIOMain->SetLampState (48, LAMP_OFF); // Light Amp Lamp MFD
|
g_pRIOMain->SetLampState (48, LAMP_OFF); // Light Amp Lamp MFD
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -10759,7 +10759,7 @@ void
|
|||||||
MWGUIManager::GetInstance()->ShowLightAmplification();
|
MWGUIManager::GetInstance()->ShowLightAmplification();
|
||||||
Mission::GetInstance()->SetLightAmpMissionLights();
|
Mission::GetInstance()->SetLightAmpMissionLights();
|
||||||
ShowZoomIfOn (false);
|
ShowZoomIfOn (false);
|
||||||
g_pRIOMain->SetLampState (26, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (26, LAMP_BRIGHT);// 鉉
|
||||||
if (!g_bJumpZoom)
|
if (!g_bJumpZoom)
|
||||||
{
|
{
|
||||||
if (g_pRIOMain->GetLampState (16) == LAMP_BRIGHT)
|
if (g_pRIOMain->GetLampState (16) == LAMP_BRIGHT)
|
||||||
@@ -10773,12 +10773,12 @@ void
|
|||||||
{
|
{
|
||||||
if(vehicle->DoesHaveLightAmp())
|
if(vehicle->DoesHaveLightAmp())
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (26, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (26, LAMP_DEFAULT);// 鉉
|
||||||
g_pRIOMain->SetLampState (48, LAMP_DEFAULT); // Light Amp Lamp MFD
|
g_pRIOMain->SetLampState (48, LAMP_DEFAULT); // Light Amp Lamp MFD
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (26, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (26, LAMP_OFF);// 鉉
|
||||||
g_pRIOMain->SetLampState (48, LAMP_OFF); // Light Amp Lamp MFD
|
g_pRIOMain->SetLampState (48, LAMP_OFF); // Light Amp Lamp MFD
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10864,12 +10864,12 @@ void
|
|||||||
Verify(message->messageID == NextNavPointMessageID);
|
Verify(message->messageID == NextNavPointMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (38, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (38, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (38, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (38, LAMP_BRIGHT);// 鉉
|
||||||
m_selectedNavPoint.Remove();
|
m_selectedNavPoint.Remove();
|
||||||
NavPoint *nav_point;
|
NavPoint *nav_point;
|
||||||
if((nav_point = NavPoint::GetNextNavPoint()) != NULL)
|
if((nav_point = NavPoint::GetNextNavPoint()) != NULL)
|
||||||
@@ -10890,7 +10890,7 @@ void
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (38, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (38, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10915,12 +10915,12 @@ void
|
|||||||
Verify(message->messageID == PreviousNavPointMessageID);
|
Verify(message->messageID == PreviousNavPointMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (37, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (37, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (37, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (37, LAMP_BRIGHT);// 鉉
|
||||||
m_selectedNavPoint.Remove();
|
m_selectedNavPoint.Remove();
|
||||||
NavPoint *nav_point;
|
NavPoint *nav_point;
|
||||||
if((nav_point = NavPoint::GetPreviousNavPoint()) != NULL)
|
if((nav_point = NavPoint::GetPreviousNavPoint()) != NULL)
|
||||||
@@ -10936,7 +10936,7 @@ void
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (37, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (37, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10961,12 +10961,12 @@ void
|
|||||||
Verify(message->messageID == NextEnemyMessageID);
|
Verify(message->messageID == NextEnemyMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (10, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (10, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (10, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (10, LAMP_BRIGHT);// 鉉
|
||||||
Entity *next_enemy = NULL;
|
Entity *next_enemy = NULL;
|
||||||
Sensor *sensor = vehicle->GetSensor();
|
Sensor *sensor = vehicle->GetSensor();
|
||||||
if(sensor)
|
if(sensor)
|
||||||
@@ -10978,7 +10978,7 @@ void
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (10, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (10, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11003,12 +11003,12 @@ void
|
|||||||
Verify(message->messageID == PreviousEnemyMessageID);
|
Verify(message->messageID == PreviousEnemyMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (9, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (9, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (9, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (9, LAMP_BRIGHT);// 鉉
|
||||||
Entity *next_enemy = NULL;
|
Entity *next_enemy = NULL;
|
||||||
Sensor *sensor = vehicle->GetSensor();
|
Sensor *sensor = vehicle->GetSensor();
|
||||||
if(sensor)
|
if(sensor)
|
||||||
@@ -11020,7 +11020,7 @@ void
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (9, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (9, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11045,12 +11045,12 @@ void
|
|||||||
Verify(message->messageID == NearestEnemyMessageID);
|
Verify(message->messageID == NearestEnemyMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (11, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (11, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (11, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (11, LAMP_BRIGHT);// 鉉
|
||||||
m_interfaceTarget.Remove();
|
m_interfaceTarget.Remove();
|
||||||
m_targetCamera->SetScene(NULL);
|
m_targetCamera->SetScene(NULL);
|
||||||
Entity *entity = NULL;
|
Entity *entity = NULL;
|
||||||
@@ -11065,7 +11065,7 @@ void
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (11, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (11, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11232,12 +11232,12 @@ void
|
|||||||
|
|
||||||
if (GetShutdownState())
|
if (GetShutdownState())
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (8, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (8, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (8, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (8, LAMP_BRIGHT);// 鉉
|
||||||
|
|
||||||
Entity *target_entity;
|
Entity *target_entity;
|
||||||
target_entity = targetQueryEntity.GetCurrent();
|
target_entity = targetQueryEntity.GetCurrent();
|
||||||
@@ -11260,7 +11260,7 @@ void
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (8, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (8, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11285,12 +11285,12 @@ void
|
|||||||
Verify(message->messageID == NextFriendlyMessageID);
|
Verify(message->messageID == NextFriendlyMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (14, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (14, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (14, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (14, LAMP_BRIGHT);// 鉉
|
||||||
Entity *next_friendly = NULL;
|
Entity *next_friendly = NULL;
|
||||||
Sensor *sensor = vehicle->GetSensor();
|
Sensor *sensor = vehicle->GetSensor();
|
||||||
if(sensor)
|
if(sensor)
|
||||||
@@ -11303,7 +11303,7 @@ void
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (14, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (14, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11328,12 +11328,12 @@ void
|
|||||||
Verify(message->messageID == PreviousFriendlyMessageID);
|
Verify(message->messageID == PreviousFriendlyMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (13, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (13, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (13, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (13, LAMP_BRIGHT);// 鉉
|
||||||
Entity *next_friendly = NULL;
|
Entity *next_friendly = NULL;
|
||||||
Sensor *sensor = vehicle->GetSensor();
|
Sensor *sensor = vehicle->GetSensor();
|
||||||
if(sensor)
|
if(sensor)
|
||||||
@@ -11346,7 +11346,7 @@ void
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (13, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (13, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11371,12 +11371,12 @@ void
|
|||||||
Verify(message->messageID == NearestFriendlyMessageID);
|
Verify(message->messageID == NearestFriendlyMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (15, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (15, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (15, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (15, LAMP_BRIGHT);// 鉉
|
||||||
Entity *entity = NULL;
|
Entity *entity = NULL;
|
||||||
Sensor *sensor = vehicle->GetSensor();
|
Sensor *sensor = vehicle->GetSensor();
|
||||||
if(sensor)
|
if(sensor)
|
||||||
@@ -11388,7 +11388,7 @@ void
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (15, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (15, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11478,7 +11478,7 @@ void VehicleInterface::OverrideShutdownMessageHandler(Adept::ReceiverDataMessage
|
|||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
//if (!GetShutdownState())
|
//if (!GetShutdownState())
|
||||||
// g_pRIOMain->SetLampState (18, LAMP_BRIGHT);// hyun
|
// g_pRIOMain->SetLampState (18, LAMP_BRIGHT);// 鉉
|
||||||
HeatManager *heat;
|
HeatManager *heat;
|
||||||
if (vehicle->IsDerivedFrom (Mech::DefaultData))
|
if (vehicle->IsDerivedFrom (Mech::DefaultData))
|
||||||
{
|
{
|
||||||
@@ -11492,7 +11492,7 @@ void VehicleInterface::OverrideShutdownMessageHandler(Adept::ReceiverDataMessage
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//if (!GetShutdownState())
|
//if (!GetShutdownState())
|
||||||
// g_pRIOMain->SetLampState (18, LAMP_DEFAULT);// hyun
|
// g_pRIOMain->SetLampState (18, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -11541,7 +11541,7 @@ void VehicleInterface::RightMFDMessageHandler (Adept::ReceiverDataMessageOf<int>
|
|||||||
|
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (52, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (52, LAMP_BRIGHT);// 鉉
|
||||||
if(MWGUIManager::GetInstance())
|
if(MWGUIManager::GetInstance())
|
||||||
{
|
{
|
||||||
Check_Object(MWGUIManager::GetInstance());
|
Check_Object(MWGUIManager::GetInstance());
|
||||||
@@ -11552,7 +11552,7 @@ void VehicleInterface::RightMFDMessageHandler (Adept::ReceiverDataMessageOf<int>
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (52, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (52, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11584,12 +11584,12 @@ void VehicleInterface::LeftMFDMessageHandler (Adept::ReceiverDataMessageOf<int>
|
|||||||
Verify(message->messageID == LeftMFDMessageID);
|
Verify(message->messageID == LeftMFDMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (12, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (12, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (12, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (12, LAMP_BRIGHT);// 鉉
|
||||||
if(MWGUIManager::GetInstance())
|
if(MWGUIManager::GetInstance())
|
||||||
{
|
{
|
||||||
Check_Object(MWGUIManager::GetInstance());
|
Check_Object(MWGUIManager::GetInstance());
|
||||||
@@ -11610,7 +11610,7 @@ void VehicleInterface::LeftMFDMessageHandler (Adept::ReceiverDataMessageOf<int>
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (12, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (12, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -11632,12 +11632,12 @@ void VehicleInterface::ToggleRadarPassiveMessageHandler (Adept::ReceiverDataMess
|
|||||||
Verify(message->messageID == ToggleRadarPassiveMessageID);
|
Verify(message->messageID == ToggleRadarPassiveMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (25, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (25, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (25, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (25, LAMP_BRIGHT);// 鉉
|
||||||
if(!vehicle->vehicleShutDown)
|
if(!vehicle->vehicleShutDown)
|
||||||
{
|
{
|
||||||
if(MWGUIManager::GetInstance())
|
if(MWGUIManager::GetInstance())
|
||||||
@@ -11676,7 +11676,7 @@ void VehicleInterface::ToggleRadarPassiveMessageHandler (Adept::ReceiverDataMess
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (25, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (25, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11702,12 +11702,12 @@ void
|
|||||||
Verify(message->messageID == ToggleRadarRangeMessageID);
|
Verify(message->messageID == ToggleRadarRangeMessageID);
|
||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
g_pRIOMain->SetLampState (24, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (24, LAMP_OFF);// 鉉
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (24, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (24, LAMP_BRIGHT);// 鉉
|
||||||
if(!vehicle->vehicleShutDown)
|
if(!vehicle->vehicleShutDown)
|
||||||
{
|
{
|
||||||
if(MWGUIManager::GetInstance())
|
if(MWGUIManager::GetInstance())
|
||||||
@@ -11739,7 +11739,7 @@ void
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (24, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (24, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13533,13 +13533,13 @@ void VehicleInterface::ShowObjectivesMessageHandler(Adept::ReceiverDataMessageOf
|
|||||||
{
|
{
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (36, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (36, LAMP_BRIGHT);// 鉉
|
||||||
g_bObjMode = !g_bObjMode;
|
g_bObjMode = !g_bObjMode;
|
||||||
// ObjectiveRenderer::Instance->ToggleObjective ();
|
// ObjectiveRenderer::Instance->ToggleObjective ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (36, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (36, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -13568,12 +13568,12 @@ void VehicleInterface::MuteMessageHandler(Adept::ReceiverDataMessageOf<int> *mes
|
|||||||
|
|
||||||
if(message->dataContents > 0)
|
if(message->dataContents > 0)
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (55, LAMP_BRIGHT);// hyun
|
g_pRIOMain->SetLampState (55, LAMP_BRIGHT);// 鉉
|
||||||
g_bMuteMode = !g_bMuteMode;
|
g_bMuteMode = !g_bMuteMode;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_pRIOMain->SetLampState (55, LAMP_DEFAULT);// hyun
|
g_pRIOMain->SetLampState (55, LAMP_DEFAULT);// 鉉
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13689,7 +13689,7 @@ void
|
|||||||
|
|
||||||
if (GetShutdownState()) {
|
if (GetShutdownState()) {
|
||||||
if (!g_bJumpZoom)
|
if (!g_bJumpZoom)
|
||||||
g_pRIOMain->SetLampState (16, LAMP_OFF);// hyun
|
g_pRIOMain->SetLampState (16, LAMP_OFF);// 鉉
|
||||||
g_pRIOMain->SetLampState (51, LAMP_OFF);
|
g_pRIOMain->SetLampState (51, LAMP_OFF);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -14489,7 +14489,7 @@ void VehicleInterface::ShowZoom (void)
|
|||||||
Check_Object(m_reticuleCamera);
|
Check_Object(m_reticuleCamera);
|
||||||
m_reticuleCamera->GetPerspective(near_clip, far_clip, horizontal_fov, height_to_width);
|
m_reticuleCamera->GetPerspective(near_clip, far_clip, horizontal_fov, height_to_width);
|
||||||
//m_reticuleCamera->SetPerspective(near_clip, far_clip, s_zoomFOV[0], height_to_width);
|
//m_reticuleCamera->SetPerspective(near_clip, far_clip, s_zoomFOV[0], height_to_width);
|
||||||
//sanghoon
|
//상훈
|
||||||
// jcem - begin
|
// jcem - begin
|
||||||
float fZoom;
|
float fZoom;
|
||||||
gosASSERT(g_fZoomFOVA >= g_fZoomFOVB);
|
gosASSERT(g_fZoomFOVA >= g_fZoomFOVB);
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public:
|
|||||||
const char* m_pcsz;
|
const char* m_pcsz;
|
||||||
|
|
||||||
int m_nLauncherConnection; // 0: no connection, +1: connection, -1: connecting
|
int m_nLauncherConnection; // 0: no connection, +1: connection, -1: connecting
|
||||||
int m_nConnection2; // Connection to game or camera ship per m_bCameraShip, 0: no connection, +1: connected, -1: connecting
|
int m_nConnection2; // m_bCameraShip값에 따라 게임 혹은 카메라 쉽과의 접속을 의미, 0: no connection, +1: connection, -1: connecting
|
||||||
int m_nApplType;
|
int m_nApplType;
|
||||||
int m_nApplState;
|
int m_nApplState;
|
||||||
int m_nGameState;
|
int m_nGameState;
|
||||||
@@ -150,7 +150,7 @@ extern int g_nMech4Comm;
|
|||||||
// server & client only
|
// server & client only
|
||||||
extern BOOL g_bIsServer;
|
extern BOOL g_bIsServer;
|
||||||
// console(All), server & client only(g_aPlayerInfos[0]), server only(g_aPlayerInfos[1..g_nBOTs]
|
// console(All), server & client only(g_aPlayerInfos[0]), server only(g_aPlayerInfos[1..g_nBOTs]
|
||||||
extern SPlayerInfo g_aPlayerInfos[35]; // 31 pilots + 1 CS + 3 spare
|
extern SPlayerInfo g_aPlayerInfos[20];
|
||||||
extern int g_nPlayerInfos;
|
extern int g_nPlayerInfos;
|
||||||
extern int g_nServer;
|
extern int g_nServer;
|
||||||
extern int g_nTeslas;
|
extern int g_nTeslas;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#include "MW4Headers.hpp"
|
#include "MW4Headers.hpp"
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
#include "MWMission.hpp"
|
#include "MWMission.hpp"
|
||||||
#include "VehicleInterface.hpp"
|
#include "VehicleInterface.hpp"
|
||||||
#include "Vehicle.hpp"
|
#include "Vehicle.hpp"
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
#include "mech.hpp"
|
#include "mech.hpp"
|
||||||
#include "mechlabheaders.h"
|
#include "mechlabheaders.h"
|
||||||
#include "bucket.hpp"
|
#include "bucket.hpp"
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
#include "hudcomp.hpp"
|
#include "hudcomp.hpp"
|
||||||
#include "HUDChat.hpp"
|
#include "HUDChat.hpp"
|
||||||
#include "hudcomm.hpp"
|
#include "hudcomm.hpp"
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
#include "mwapplication.hpp"
|
#include "mwapplication.hpp"
|
||||||
#include "..\missionlang\resource.h"
|
#include "..\missionlang\resource.h"
|
||||||
|
|
||||||
//sanghoon begin
|
//상훈짱 begin
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <ddraw.h>
|
#include <ddraw.h>
|
||||||
#include <d3d.h>
|
#include <d3d.h>
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
extern Scalar g_fLastStartTime;
|
extern Scalar g_fLastStartTime;
|
||||||
extern Adept::ReplicatorID g_LastTarget;
|
extern Adept::ReplicatorID g_LastTarget;
|
||||||
|
|
||||||
//sanghoon end
|
//상훈짱 end
|
||||||
|
|
||||||
extern "C" char* _stdcall CharPrevA(const char* lpszStart, const char* lpszCurrent);
|
extern "C" char* _stdcall CharPrevA(const char* lpszStart, const char* lpszCurrent);
|
||||||
#define CharPrev CharPrevA
|
#define CharPrev CharPrevA
|
||||||
@@ -164,7 +164,7 @@ void HUDChat::Reset (void)
|
|||||||
// KillData ();
|
// KillData ();
|
||||||
comm = Cast_Object (HUDComm *, MWGUIManager::GetInstance ()->Component (MWGUIManager::HUD_COMM));
|
comm = Cast_Object (HUDComm *, MWGUIManager::GetInstance ()->Component (MWGUIManager::HUD_COMM));
|
||||||
|
|
||||||
//Load map data for mr_device.
|
//mr_device의 맵 데이타를 로드한다.
|
||||||
if(hsh_mrdev_initialized){
|
if(hsh_mrdev_initialized){
|
||||||
extern char AssetsDirectory1[MAX_PATH];
|
extern char AssetsDirectory1[MAX_PATH];
|
||||||
const Map__GameModel *model = Map::GetInstance ()->GetGameModel ();
|
const Map__GameModel *model = Map::GetInstance ()->GetGameModel ();
|
||||||
@@ -228,12 +228,12 @@ static const float sm1_offset[][2]={
|
|||||||
{ 0*2, 0*2}, //special2
|
{ 0*2, 0*2}, //special2
|
||||||
};
|
};
|
||||||
|
|
||||||
//number: 0,1,2,3 lancemate order..
|
//number: 0,1,2,3 lancemate의 순서..
|
||||||
//part: mech part of the lancemate
|
//part: 해당 lancemate mech의 part
|
||||||
//color: color for this part
|
//color:해당 part의 color
|
||||||
void RenderAux1SmallMech(int num,int part,int color)
|
void RenderAux1SmallMech(int num,int part,int color)
|
||||||
{
|
{
|
||||||
//Draw according to each offset.
|
//각각의 offset에 따라서 그린다.
|
||||||
if(sm1_texture[part][2]!=0){
|
if(sm1_texture[part][2]!=0){
|
||||||
mfd_device.DrawTexture(
|
mfd_device.DrawTexture(
|
||||||
sm1_offset[part][0]+190+num*160,
|
sm1_offset[part][0]+190+num*160,
|
||||||
@@ -598,15 +598,15 @@ void HUDChat::DrawImplementation(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(draw_mr){
|
if(draw_mr){
|
||||||
//Draw mission review content.
|
//미션 리뷰 내용을 그린다.
|
||||||
//_______________________________________________________________________________________________________
|
//_______________________________________________________________________________________________________
|
||||||
//
|
//
|
||||||
// Mech status and messages
|
// Mech상태 및 메시지
|
||||||
//_______________________________________________________________________________________________________
|
//_______________________________________________________________________________________________________
|
||||||
if(!mr_device.map_loaded){
|
if(!mr_device.map_loaded){
|
||||||
comm = Cast_Object (HUDComm *, MWGUIManager::GetInstance ()->Component (MWGUIManager::HUD_COMM));
|
comm = Cast_Object (HUDComm *, MWGUIManager::GetInstance ()->Component (MWGUIManager::HUD_COMM));
|
||||||
|
|
||||||
//Load map data for mr_device.
|
//mr_device의 맵 데이타를 로드한다.
|
||||||
extern char AssetsDirectory1[MAX_PATH];
|
extern char AssetsDirectory1[MAX_PATH];
|
||||||
const Map__GameModel *model = Map::GetInstance ()->GetGameModel ();
|
const Map__GameModel *model = Map::GetInstance ()->GetGameModel ();
|
||||||
char temp[256];
|
char temp[256];
|
||||||
@@ -629,7 +629,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
int mech_count=0;
|
int mech_count=0;
|
||||||
PMechInfo pMechInfos = &g_aMechInfos[0];
|
PMechInfo pMechInfos = &g_aMechInfos[0];
|
||||||
{
|
{
|
||||||
//Draw the name/Kill/Death stats of other mechs.
|
//현재 다른 메크들의 이름 /Kill/Death를 그린다.
|
||||||
mech_count=MWApplication::GetInstance()->GetMechInfos(2, g_aMechInfos, g_TeamOrderOthers);
|
mech_count=MWApplication::GetInstance()->GetMechInfos(2, g_aMechInfos, g_TeamOrderOthers);
|
||||||
g_TeamOrderCount=mech_count;
|
g_TeamOrderCount=mech_count;
|
||||||
if (mech_count > 8) // jcem
|
if (mech_count > 8) // jcem
|
||||||
@@ -657,7 +657,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
|
|
||||||
|
|
||||||
mr_device.pD3DDevice->SetTexture(0,mr_device.pDDSTexture);
|
mr_device.pD3DDevice->SetTexture(0,mr_device.pDDSTexture);
|
||||||
//Draw mech Damage status.
|
//메크의 Damage 상태를 그린다.
|
||||||
for (j=0;j<11;j++){
|
for (j=0;j<11;j++){
|
||||||
if (j==7 || j==9 || j==10)
|
if (j==7 || j==9 || j==10)
|
||||||
continue;
|
continue;
|
||||||
@@ -669,7 +669,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw mech Callsign/Score/Kills/Deaths.
|
//메크의 Callsign/Score/Kills/Deaths를 그린다.
|
||||||
int nScore = 0, nKills = 0, nDeaths = 0;
|
int nScore = 0, nKills = 0, nDeaths = 0;
|
||||||
callsign=pMechInfos->m_pcszName;
|
callsign=pMechInfos->m_pcszName;
|
||||||
if (hud) {
|
if (hud) {
|
||||||
@@ -695,7 +695,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
pMechInfos++;
|
pMechInfos++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw the contents of the chat window.
|
//채팅장의 내용을 그린다.
|
||||||
stlport::list<ChatData>::iterator iter;
|
stlport::list<ChatData>::iterator iter;
|
||||||
int cy=300+30;//chat_y
|
int cy=300+30;//chat_y
|
||||||
for (iter = m_Messages.begin ();iter != m_Messages.end ();iter++){
|
for (iter = m_Messages.begin ();iter != m_Messages.end ();iter++){
|
||||||
@@ -733,8 +733,8 @@ void HUDChat::DrawImplementation(void)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
// Secondary Maps
|
// Secondary Maps
|
||||||
//Draw map and boundary. (Drawn once since it does not change during game.)
|
//맵과 맵 경계선을 그린다. (게임중에 변하지 않으므로 한번만 그린다.)
|
||||||
//DrawMapBoundary();//Implement alternate version...
|
//DrawMapBoundary();//다른 버전 구현할 것...
|
||||||
mr_device.pD3DDevice->SetRenderState(D3DRENDERSTATE_CLIPPING ,TRUE);
|
mr_device.pD3DDevice->SetRenderState(D3DRENDERSTATE_CLIPPING ,TRUE);
|
||||||
mr_device.pD3DDevice->SetTexture(0,mr_device.pDDSMapTexture);
|
mr_device.pD3DDevice->SetTexture(0,mr_device.pDDSMapTexture);
|
||||||
mr_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
mr_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
||||||
@@ -748,7 +748,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
//MechWarrior4::VehicleInterface* p = MechWarrior4::VehicleInterface::GetInstance();
|
//MechWarrior4::VehicleInterface* p = MechWarrior4::VehicleInterface::GetInstance();
|
||||||
|
|
||||||
|
|
||||||
//In mission review, current mech is shown at center so the map scrolls.
|
//미션 리뷰에서는 현재 메크가 중심에 표시되므로 맵이 스크롤 되어 표시된다.
|
||||||
float MR_MSF=4.0f;//Mission Review - Map Scale Factor
|
float MR_MSF=4.0f;//Mission Review - Map Scale Factor
|
||||||
const float ViewSize=300.0f;//Mission Review - Map Size
|
const float ViewSize=300.0f;//Mission Review - Map Size
|
||||||
const float ViewLMargin=10;
|
const float ViewLMargin=10;
|
||||||
@@ -758,9 +758,9 @@ void HUDChat::DrawImplementation(void)
|
|||||||
|
|
||||||
D3DVIEWPORT7 viewport={ViewLMargin,ViewTMargin,ViewSize,ViewSize,0.0f,1.0f};
|
D3DVIEWPORT7 viewport={ViewLMargin,ViewTMargin,ViewSize,ViewSize,0.0f,1.0f};
|
||||||
mr_device.pD3DDevice->SetViewport(&viewport);
|
mr_device.pD3DDevice->SetViewport(&viewport);
|
||||||
///////////////////// MAP BEGIN //////////////////////
|
///////////////////// MAP 시작 //////////////////////
|
||||||
|
|
||||||
//Need to add routine to set Focus Mech.
|
//Focus Mech를 설정하는 루틴을 넣어야한다.
|
||||||
Scalar multx,multz;
|
Scalar multx,multz;
|
||||||
|
|
||||||
|
|
||||||
@@ -787,10 +787,10 @@ void HUDChat::DrawImplementation(void)
|
|||||||
|
|
||||||
mr_device.pD3DDevice->SetTexture(0,mr_device.pDDSTexture);
|
mr_device.pD3DDevice->SetTexture(0,mr_device.pDDSTexture);
|
||||||
|
|
||||||
//Draw mechs on map. Text first..
|
//맵상에 메크들들 그리기.텍스트 먼저..
|
||||||
for(i=0,pMechInfos = &g_aMechInfos[0];i<mech_count;i++,pMechInfos++){
|
for(i=0,pMechInfos = &g_aMechInfos[0];i<mech_count;i++,pMechInfos++){
|
||||||
Mech* pMech = pMechInfos->m_pMech;
|
Mech* pMech = pMechInfos->m_pMech;
|
||||||
//TODO: get mech position..
|
//메크의 위치를 구할 것..
|
||||||
|
|
||||||
Stuff::Point3D pos;
|
Stuff::Point3D pos;
|
||||||
|
|
||||||
@@ -827,10 +827,10 @@ void HUDChat::DrawImplementation(void)
|
|||||||
color,callsign,TEXTALIGN_HCENTER|TEXTALIGN_TOP);
|
color,callsign,TEXTALIGN_HCENTER|TEXTALIGN_TOP);
|
||||||
|
|
||||||
}
|
}
|
||||||
//Draw icon.
|
//아이콘 그리기.
|
||||||
for(i=0,pMechInfos = &g_aMechInfos[0];i<mech_count;i++,pMechInfos++){
|
for(i=0,pMechInfos = &g_aMechInfos[0];i<mech_count;i++,pMechInfos++){
|
||||||
Mech* pMech = pMechInfos->m_pMech;
|
Mech* pMech = pMechInfos->m_pMech;
|
||||||
//TODO: get mech position..
|
//메크의 위치를 구할 것..
|
||||||
|
|
||||||
Stuff::Point3D pos;
|
Stuff::Point3D pos;
|
||||||
|
|
||||||
@@ -886,7 +886,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
mr_device.pD3DDevice->SetViewport(&viewport2);
|
mr_device.pD3DDevice->SetViewport(&viewport2);
|
||||||
|
|
||||||
|
|
||||||
///////////////////// MAP END //////////////////////
|
///////////////////// MAP 끝 //////////////////////
|
||||||
|
|
||||||
//_______________________________________________________________________________________________________
|
//_______________________________________________________________________________________________________
|
||||||
//
|
//
|
||||||
@@ -894,7 +894,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
//_______________________________________________________________________________________________________
|
//_______________________________________________________________________________________________________
|
||||||
|
|
||||||
|
|
||||||
//Draw mission timer... taken from DrawImplementation in hudtimer.cpp..
|
//미션 시간 그리기...hudtimer.cpp에 DrawImplementation에서 따온것임..
|
||||||
MWMission *mwmiss = Cast_Object (MWMission *,Mission::GetInstance ());
|
MWMission *mwmiss = Cast_Object (MWMission *,Mission::GetInstance ());
|
||||||
Verify (mwmiss);
|
Verify (mwmiss);
|
||||||
Stuff::Scalar cur_time=mwmiss->GetMissionTime();//-mwmiss->GetMissionTime();
|
Stuff::Scalar cur_time=mwmiss->GetMissionTime();//-mwmiss->GetMissionTime();
|
||||||
@@ -923,7 +923,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
if(g_nTeamOrderMode==TEAM_MODE){
|
if(g_nTeamOrderMode==TEAM_MODE){
|
||||||
int i,j;
|
int i,j;
|
||||||
int size=3;
|
int size=3;
|
||||||
//Draw mech status.
|
//메크들의 상태를 그린다.
|
||||||
PMechInfo pMechInfos = &g_aMechInfos[1];
|
PMechInfo pMechInfos = &g_aMechInfos[1];
|
||||||
size=MWApplication::GetInstance()->GetMechInfos(0, g_aMechInfos, g_TeamOrderOthers);
|
size=MWApplication::GetInstance()->GetMechInfos(0, g_aMechInfos, g_TeamOrderOthers);
|
||||||
size--;
|
size--;
|
||||||
@@ -970,7 +970,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
pMechInfos++;
|
pMechInfos++;
|
||||||
}
|
}
|
||||||
mfd_device.DrawMFDBackText(mfd_text_comm1);
|
mfd_device.DrawMFDBackText(mfd_text_comm1);
|
||||||
//Draw the contents of the chat window.
|
//채팅장의 내용을 그린다.
|
||||||
stlport::list<ChatData>::iterator iter;
|
stlport::list<ChatData>::iterator iter;
|
||||||
int cy=240;//chat_y
|
int cy=240;//chat_y
|
||||||
for (iter = m_Messages.begin ();iter != m_Messages.end ();iter++){
|
for (iter = m_Messages.begin ();iter != m_Messages.end ();iter++){
|
||||||
@@ -996,7 +996,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}else if(g_nTeamOrderMode==FREEFORALL_MODE){
|
}else if(g_nTeamOrderMode==FREEFORALL_MODE){
|
||||||
//Draw the name/Kill/Death stats of other mechs.
|
//현재 다른 메크들의 이름 /Kill/Death를 그린다.
|
||||||
int size=0;
|
int size=0;
|
||||||
PMechInfo pMechInfos = &g_aMechInfos[1];
|
PMechInfo pMechInfos = &g_aMechInfos[1];
|
||||||
size=MWApplication::GetInstance()->GetMechInfos(2, g_aMechInfos, g_TeamOrderOthers);
|
size=MWApplication::GetInstance()->GetMechInfos(2, g_aMechInfos, g_TeamOrderOthers);
|
||||||
@@ -1006,10 +1006,10 @@ void HUDChat::DrawImplementation(void)
|
|||||||
size = 7;
|
size = 7;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
//Clear the numbers first.
|
//번호를 먼저 지운다.
|
||||||
// MSL 5.03 Comm MFD
|
// MSL 5.03 Comm MFD
|
||||||
for(i=0;i<7;i++)mfd_text_comm3[i][0]=0;
|
for(i=0;i<7;i++)mfd_text_comm3[i][0]=0;
|
||||||
//Fill in the numbers.
|
//번호를 채워 넣는다.
|
||||||
// MSL 5.03 Comm MFD
|
// MSL 5.03 Comm MFD
|
||||||
for(i=0;i<size;i++)itoa(i+1,mfd_text_comm3[i],10);
|
for(i=0;i<size;i++)itoa(i+1,mfd_text_comm3[i],10);
|
||||||
|
|
||||||
@@ -1064,8 +1064,8 @@ void HUDChat::DrawImplementation(void)
|
|||||||
if(size.cx<160){
|
if(size.cx<160){
|
||||||
mfd_device.pFont[1].DrawText((float)p2->x,(float)p2->y,0xFFFFFFFF,callsign,TEXTALIGN_ORG);
|
mfd_device.pFont[1].DrawText((float)p2->x,(float)p2->y,0xFFFFFFFF,callsign,TEXTALIGN_ORG);
|
||||||
}else{
|
}else{
|
||||||
//Even the minimum font size is exceeded...
|
//최소크기 폰트도.. 넘어선다...
|
||||||
//Split into 2 lines.
|
//2line으로 만든다.
|
||||||
char callsign2[128];
|
char callsign2[128];
|
||||||
strcpy(callsign2,callsign);
|
strcpy(callsign2,callsign);
|
||||||
int len2=strlen(callsign)/2;
|
int len2=strlen(callsign)/2;
|
||||||
@@ -1120,7 +1120,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
|
|
||||||
pMechInfos++;
|
pMechInfos++;
|
||||||
}
|
}
|
||||||
//Draw the contents of the chat window.
|
//채팅장의 내용을 그린다.
|
||||||
stlport::list<ChatData>::iterator iter;
|
stlport::list<ChatData>::iterator iter;
|
||||||
int cy=180;//chat_y
|
int cy=180;//chat_y
|
||||||
for (iter = m_Messages.begin ();iter != m_Messages.end ();iter++){
|
for (iter = m_Messages.begin ();iter != m_Messages.end ();iter++){
|
||||||
@@ -1145,7 +1145,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
iter = m_Messages.erase (iter);
|
iter = m_Messages.erase (iter);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
//Taken from MWMission.cpp
|
//MWMission.cpp에서 가져온것인
|
||||||
MWMission *mwmiss = Cast_Object (MWMission *,Mission::GetInstance ());
|
MWMission *mwmiss = Cast_Object (MWMission *,Mission::GetInstance ());
|
||||||
|
|
||||||
int death=0,kill=0;//,score
|
int death=0,kill=0;//,score
|
||||||
@@ -1167,7 +1167,7 @@ void HUDChat::DrawImplementation(void)
|
|||||||
}else if(g_nTeamOrderMode==TEAM_MESSAGE2){
|
}else if(g_nTeamOrderMode==TEAM_MESSAGE2){
|
||||||
;//do nothing
|
;//do nothing
|
||||||
}
|
}
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
mfd_device.EndChannel();
|
mfd_device.EndChannel();
|
||||||
} else {
|
} else {
|
||||||
}//hsh_initialized
|
}//hsh_initialized
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#include "MW4Headers.hpp"
|
#include "MW4Headers.hpp"
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
#include "MWMission.hpp"
|
#include "MWMission.hpp"
|
||||||
#include "VehicleInterface.hpp"
|
#include "VehicleInterface.hpp"
|
||||||
#include "Narc.hpp"
|
#include "Narc.hpp"
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
#include "mwguimanager.hpp"
|
#include "mwguimanager.hpp"
|
||||||
#include "MWPlayer.hpp"
|
#include "MWPlayer.hpp"
|
||||||
#include <Adept\Mission.hpp>
|
#include <Adept\Mission.hpp>
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
|
|
||||||
#include "hudcomp.hpp"
|
#include "hudcomp.hpp"
|
||||||
#include "HUDComm.hpp"
|
#include "HUDComm.hpp"
|
||||||
@@ -25,14 +25,14 @@
|
|||||||
#include "..\missionlang\resource.h"
|
#include "..\missionlang\resource.h"
|
||||||
#include "mechlabheaders.h"
|
#include "mechlabheaders.h"
|
||||||
|
|
||||||
//sanghoon begin
|
//상훈짱 begin
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <ddraw.h>
|
#include <ddraw.h>
|
||||||
#include <d3d.h>
|
#include <d3d.h>
|
||||||
|
|
||||||
#include <GameOS\render.hpp>
|
#include <GameOS\render.hpp>
|
||||||
|
|
||||||
//sanghoon end
|
//상훈짱 end
|
||||||
|
|
||||||
using namespace MechWarrior4;
|
using namespace MechWarrior4;
|
||||||
|
|
||||||
|
|||||||
@@ -333,7 +333,7 @@ inline DWORD DarkerColor (DWORD color)
|
|||||||
{ m_Justification = value; }
|
{ m_Justification = value; }
|
||||||
void Wrap (bool value)
|
void Wrap (bool value)
|
||||||
{ m_Wrap = value; }
|
{ m_Wrap = value; }
|
||||||
//sanghoon
|
//상훈
|
||||||
void SetAsAlt(){
|
void SetAsAlt(){
|
||||||
m_Font=altFontHandle;
|
m_Font=altFontHandle;
|
||||||
}
|
}
|
||||||
@@ -381,9 +381,9 @@ inline DWORD DarkerColor (DWORD color)
|
|||||||
virtual void EndPos (DWORD& x,DWORD& y, bool bAdjust = true);
|
virtual void EndPos (DWORD& x,DWORD& y, bool bAdjust = true);
|
||||||
bool Empty (void)
|
bool Empty (void)
|
||||||
{ return (m_Text[0] == 0); }
|
{ return (m_Text[0] == 0); }
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
char *hsh_get_m_Text(){return m_Text;}
|
char *hsh_get_m_Text(){return m_Text;}
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
};
|
};
|
||||||
|
|
||||||
class HUDNumberText : public HUDText
|
class HUDNumberText : public HUDText
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ void HUDTargetArrow::SetZoomWindow(Stuff::Scalar left,Stuff::Scalar top,Stuff::S
|
|||||||
|
|
||||||
void HUDTargetArrow::DrawImplementation(void)
|
void HUDTargetArrow::DrawImplementation(void)
|
||||||
{
|
{
|
||||||
//sanghoon - need to find where blink handling is done.
|
//상훈-깜박임 처리는 어디서 하는지 찾아 볼것.
|
||||||
Point3D loc,size;
|
Point3D loc,size;
|
||||||
DWORD color;
|
DWORD color;
|
||||||
int textx,texty,ty2;
|
int textx,texty,ty2;
|
||||||
@@ -208,7 +208,7 @@ void HUDTargetArrow::DrawImplementation(void)
|
|||||||
{
|
{
|
||||||
size = m_Textures[5]->Size ();
|
size = m_Textures[5]->Size ();
|
||||||
m_Textures[5]->Draw (Point3D (m_TargetX,m_TargetY,0.9f),size,color);
|
m_Textures[5]->Draw (Point3D (m_TargetX,m_TargetY,0.9f),size,color);
|
||||||
//Texture of four angle brackets merged into one...
|
//꺽쇠 네개가 하나로 합쳐진 텍스쳐...
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -278,7 +278,7 @@ void HUDTorsoBar::DrawImplementation(void)
|
|||||||
Scalar currentxval,currentyval;
|
Scalar currentxval,currentyval;
|
||||||
Point3D size,loc,texsize;
|
Point3D size,loc,texsize;
|
||||||
|
|
||||||
//Routine to draw the graph representing the x-axis...
|
//x축을 나타내는 그래프를 그리는 루틴...
|
||||||
//_________________________________________________________________________
|
//_________________________________________________________________________
|
||||||
size = TwistSize ();
|
size = TwistSize ();
|
||||||
texsize = m_Textures[0]->Size ();
|
texsize = m_Textures[0]->Size ();
|
||||||
@@ -289,7 +289,7 @@ void HUDTorsoBar::DrawImplementation(void)
|
|||||||
if (currentxval > 0)
|
if (currentxval > 0)
|
||||||
loc.x += 1.0f;
|
loc.x += 1.0f;
|
||||||
DWORD color = DarkerColor (Color ());
|
DWORD color = DarkerColor (Color ());
|
||||||
//Draw horizontal ruler. (arrows not included)
|
//가로 ruler를 그린다.(화살표는 들어있지 않음)
|
||||||
m_Textures[5]->Draw (loc,m_Textures[5]->Size (),color,HUDTexture::NO_FLIP,true);
|
m_Textures[5]->Draw (loc,m_Textures[5]->Size (),color,HUDTexture::NO_FLIP,true);
|
||||||
color = Color ();
|
color = Color ();
|
||||||
if (currentxval != 0)
|
if (currentxval != 0)
|
||||||
@@ -315,19 +315,19 @@ void HUDTorsoBar::DrawImplementation(void)
|
|||||||
ty= (DWORD) (loc.y+size.y+10);
|
ty= (DWORD) (loc.y+size.y+10);
|
||||||
if ((currentxval > 5) || (currentxval < -5))
|
if ((currentxval > 5) || (currentxval < -5))
|
||||||
{
|
{
|
||||||
//Shows direction indicator when torso twist is excessive..
|
//과도한 twist시에 방향표시해줌..
|
||||||
m_TwistText->Draw (Point3D ((Scalar) tx,(Scalar) ty,0.9f));
|
m_TwistText->Draw (Point3D ((Scalar) tx,(Scalar) ty,0.9f));
|
||||||
}
|
}
|
||||||
//Upper body indicator rectangle..
|
//상체표시 사각형..
|
||||||
// Changed Torso Bar from Green to Yellow
|
// Changed Torso Bar from Green to Yellow
|
||||||
// MSL 5.00
|
// MSL 5.00
|
||||||
color = MakeColor (255,255,0,250);
|
color = MakeColor (255,255,0,250);
|
||||||
my_DrawRect (min,(int) loc.y,max,(int) (loc.y+size.y),color);
|
my_DrawRect (min,(int) loc.y,max,(int) (loc.y+size.y),color);
|
||||||
|
|
||||||
color = DarkerColor (Color ());
|
color = DarkerColor (Color ());
|
||||||
//Top arrow indicating upper body direction..
|
//위쪽, 상체 방향표시 화살표..
|
||||||
m_Textures[2]->Draw (Point3D (loc.x-currentxval,loc.y-1,0.9f),texsize,color);
|
m_Textures[2]->Draw (Point3D (loc.x-currentxval,loc.y-1,0.9f),texsize,color);
|
||||||
//Bottom arrow indicating center position..
|
//아래쪽. 중심표시 화살표..
|
||||||
m_Textures[3]->Draw (Point3D (loc.x-1,loc.y+size.y+1,0.9f),texsize,color);
|
m_Textures[3]->Draw (Point3D (loc.x-1,loc.y+size.y+1,0.9f),texsize,color);
|
||||||
// DrawLine ((int) (loc.x-currentxval),(int) (loc.y-1),(int) (loc.x-currentxval),(int) (loc.y+size.y),color);
|
// DrawLine ((int) (loc.x-currentxval),(int) (loc.y-1),(int) (loc.x-currentxval),(int) (loc.y+size.y),color);
|
||||||
}
|
}
|
||||||
@@ -339,7 +339,7 @@ void HUDTorsoBar::DrawImplementation(void)
|
|||||||
// DrawLine ((int) (loc.x),(int) (loc.y-1),(int) (loc.x),(int) (loc.y+size.y),color);
|
// DrawLine ((int) (loc.x),(int) (loc.y-1),(int) (loc.x),(int) (loc.y+size.y),color);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Routine to draw graph for y-axis... <== no excessive up/down text here.
|
//y축을 나타내는 그래프를 그리는 루틴...<==여기는 과도한 상하를 나타내는 텍스트가 없다.
|
||||||
//_________________________________________________________________________
|
//_________________________________________________________________________
|
||||||
size = PitchSize ();
|
size = PitchSize ();
|
||||||
currentyval = (m_TorsoPitch*size.y)/100.0f; // 33 is the width of the bar
|
currentyval = (m_TorsoPitch*size.y)/100.0f; // 33 is the width of the bar
|
||||||
@@ -382,7 +382,7 @@ void HUDTorsoBar::DrawImplementation(void)
|
|||||||
m_Textures[1]->Draw (Point3D (loc.x+size.x,loc.y,0.9f),texsize,color);
|
m_Textures[1]->Draw (Point3D (loc.x+size.x,loc.y,0.9f),texsize,color);
|
||||||
// DrawLine ((int) (loc.x-1),(int) (loc.y),(int) (loc.x+size.x+2),(int) (loc.y),color);
|
// DrawLine ((int) (loc.x-1),(int) (loc.y),(int) (loc.x+size.x+2),(int) (loc.y),color);
|
||||||
}
|
}
|
||||||
//End.. DrawImplementation.
|
//끝.. DrawImplementation.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#include "mwapplication.hpp"
|
#include "mwapplication.hpp"
|
||||||
#include "..\missionlang\resource.h"
|
#include "..\missionlang\resource.h"
|
||||||
|
|
||||||
//sanghoon begin
|
//상훈짱 begin
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <ddraw.h>
|
#include <ddraw.h>
|
||||||
#include <d3d.h>
|
#include <d3d.h>
|
||||||
@@ -34,7 +34,7 @@ bool g_bNextTargetMode = false;
|
|||||||
bool g_bCrossTargetMode = false;
|
bool g_bCrossTargetMode = false;
|
||||||
// MSL 5.03 Secondary Damage Display
|
// MSL 5.03 Secondary Damage Display
|
||||||
int g_nAuxilMode = 0;
|
int g_nAuxilMode = 0;
|
||||||
//sanghoon end
|
//상훈짱 end
|
||||||
|
|
||||||
using namespace MechWarrior4;
|
using namespace MechWarrior4;
|
||||||
namespace HUDDAMAGE
|
namespace HUDDAMAGE
|
||||||
@@ -330,9 +330,9 @@ HUDDamage::HUDDamage()
|
|||||||
Color (MakeColor (0,175,0,150));
|
Color (MakeColor (0,175,0,150));
|
||||||
m_DamageFlashTime = 0;
|
m_DamageFlashTime = 0;
|
||||||
m_HitFlashTime = 0;
|
m_HitFlashTime = 0;
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
VehicleInterface::GetInstance()->hudDamageMode=false;
|
VehicleInterface::GetInstance()->hudDamageMode=false;
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
m_ArmorMode = VehicleInterface::GetInstance()->hudDamageMode;
|
m_ArmorMode = VehicleInterface::GetInstance()->hudDamageMode;
|
||||||
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
||||||
{
|
{
|
||||||
@@ -410,7 +410,7 @@ void HUDDamage::Reset (void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//sanghoon
|
//상훈
|
||||||
mfd_device.LoadDamageTexture(texturename[m_MechID]);
|
mfd_device.LoadDamageTexture(texturename[m_MechID]);
|
||||||
radar_device.LoadRadarDamageTexture(texturename[m_MechID]);
|
radar_device.LoadRadarDamageTexture(texturename[m_MechID]);
|
||||||
}
|
}
|
||||||
@@ -464,7 +464,7 @@ void HUDDamage::ArmorValue (Scalar values[MAX_HUD_DAMAGE_ZONE+1],bool firstpass)
|
|||||||
m_ArmorValues[i] = values[i];
|
m_ArmorValues[i] = values[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
|
|
||||||
//nst DWORD SH_DamageColor[6]={0xFFFFFFFF,0xFFCCCCCC,0xFF999999,0xFF666666,0xFF333333,0xFF000000};
|
//nst DWORD SH_DamageColor[6]={0xFFFFFFFF,0xFFCCCCCC,0xFF999999,0xFF666666,0xFF333333,0xFF000000};
|
||||||
const DWORD SH_DamageColor[6]={0xFFFFFFFF,0xFFDDDDDD,0xFFBBBBBB,0xFF999999,0xFF777777,0xFF333333};
|
const DWORD SH_DamageColor[6]={0xFFFFFFFF,0xFFDDDDDD,0xFFBBBBBB,0xFF999999,0xFF777777,0xFF333333};
|
||||||
@@ -566,7 +566,7 @@ static RECT damage_back_frames[4]={
|
|||||||
{504,245,566,382},
|
{504,245,566,382},
|
||||||
{573,245,634,382},
|
{573,245,634,382},
|
||||||
};
|
};
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
|
|
||||||
void HUDDamage::DrawImplementation(void)
|
void HUDDamage::DrawImplementation(void)
|
||||||
{
|
{
|
||||||
@@ -632,7 +632,7 @@ void HUDDamage::DrawImplementation(void)
|
|||||||
color = Color ();
|
color = Color ();
|
||||||
for (i=0;i<10;i++)
|
for (i=0;i<10;i++)
|
||||||
{
|
{
|
||||||
//Is this where text is drawn??
|
//글자를 그리는 곳인가??
|
||||||
m_Textures[20+i]->Draw (Point3D ((Scalar) bartable[i]+1.0f,(Scalar) y,0.9f),size,MakeColor (255,255,255,255),HUDTexture::NO_FLIP,true);
|
m_Textures[20+i]->Draw (Point3D ((Scalar) bartable[i]+1.0f,(Scalar) y,0.9f),size,MakeColor (255,255,255,255),HUDTexture::NO_FLIP,true);
|
||||||
if (!(m_HitFlashCount[trans_array[i]] & 0x01))
|
if (!(m_HitFlashCount[trans_array[i]] & 0x01))
|
||||||
{
|
{
|
||||||
@@ -752,7 +752,7 @@ void HUDDamage::DrawImplementation(void)
|
|||||||
fred = 0;
|
fred = 0;
|
||||||
|
|
||||||
for (i=0;i<11;i++)
|
for (i=0;i<11;i++)
|
||||||
{//What does the number 13 mean here?
|
{//13이라는 숫자가 의미하는 것은 무엇일까?
|
||||||
#if 0
|
#if 0
|
||||||
if (i != fred)
|
if (i != fred)
|
||||||
{
|
{
|
||||||
@@ -872,7 +872,7 @@ void HUDDamage::DrawImplementation(void)
|
|||||||
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA );
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA );
|
||||||
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA );
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA );
|
||||||
|
|
||||||
//The original spacing is 13,14,14,14,14,14,14,14,16,14.
|
//원래것은..13,14,14,14,14,14,14,14,16,14의 간격을 두고 있다.
|
||||||
const hsh_bartable[11] = {26+61*0,26+61*1,26+61*2,26+61*3,26+61*4,26+61*5,26+61*6,26+61*7,522,591,540};
|
const hsh_bartable[11] = {26+61*0,26+61*1,26+61*2,26+61*3,26+61*4,26+61*5,26+61*6,26+61*7,522,591,540};
|
||||||
|
|
||||||
DWORD color=0xFFFFFFFF;
|
DWORD color=0xFFFFFFFF;
|
||||||
@@ -907,7 +907,7 @@ void HUDDamage::DrawImplementation(void)
|
|||||||
radar_device.pDDSTarget->Blt(&rc,NULL,NULL,DDBLT_COLORFILL ,&fx);
|
radar_device.pDDSTarget->Blt(&rc,NULL,NULL,DDBLT_COLORFILL ,&fx);
|
||||||
|
|
||||||
for (i=0;i<11;i++)
|
for (i=0;i<11;i++)
|
||||||
{//What does the number 13 mean here?
|
{//13이라는 숫자가 의미하는 것은 무엇일까?
|
||||||
int dv=m_DamageValues[i];
|
int dv=m_DamageValues[i];
|
||||||
DWORD color=0xFF000000;
|
DWORD color=0xFF000000;
|
||||||
if(0<=dv && dv<=5)
|
if(0<=dv && dv<=5)
|
||||||
@@ -948,7 +948,7 @@ void HUDDamage::DrawImplementation(void)
|
|||||||
{
|
{
|
||||||
if (m_ArmorValues[trans_array[i]] != -1)
|
if (m_ArmorValues[trans_array[i]] != -1)
|
||||||
{
|
{
|
||||||
hsh_x=hsh_bartable[i];//Exception at index 7.
|
hsh_x=hsh_bartable[i];//7에서는 예외이다.
|
||||||
int tr=trans_array[i];
|
int tr=trans_array[i];
|
||||||
|
|
||||||
DWORD color=(m_HitFlashCount[tr] & 0x01)? 0xFFFFFFFF : SH_DamageColor[m_DamageValues[tr]];
|
DWORD color=(m_HitFlashCount[tr] & 0x01)? 0xFFFFFFFF : SH_DamageColor[m_DamageValues[tr]];
|
||||||
@@ -999,7 +999,7 @@ void HUDDamage::DrawImplementation(void)
|
|||||||
mfd_device.LoadDamageTexture(texturename[m_MechID]);
|
mfd_device.LoadDamageTexture(texturename[m_MechID]);
|
||||||
|
|
||||||
for (i=0;i<13;i++)
|
for (i=0;i<13;i++)
|
||||||
{//What does the number 13 mean here?
|
{//13이라는 숫자가 의미하는 것은 무엇일까?
|
||||||
int dv=m_DamageValues[i];
|
int dv=m_DamageValues[i];
|
||||||
DWORD color=0xFF000000;
|
DWORD color=0xFF000000;
|
||||||
if(0<=dv && dv<=5)color=SH_DamageColor[dv];
|
if(0<=dv && dv<=5)color=SH_DamageColor[dv];
|
||||||
@@ -1249,7 +1249,7 @@ HUDTargetDamage::HUDTargetDamage() :
|
|||||||
m_TargetName->Justification (HUDText::LEFT_ALIGN);
|
m_TargetName->Justification (HUDText::LEFT_ALIGN);
|
||||||
m_TargetRangeText = new HUDNumberText ();
|
m_TargetRangeText = new HUDNumberText ();
|
||||||
m_TargetRangeText->Justification (HUDText::LEFT_ALIGN);
|
m_TargetRangeText->Justification (HUDText::LEFT_ALIGN);
|
||||||
//sanghoon
|
//상훈
|
||||||
// m_TargetRangeText->SetSize(HUDText::LARGE_SIZE);
|
// m_TargetRangeText->SetSize(HUDText::LARGE_SIZE);
|
||||||
m_TargetRangeText->SetSize(HUDText::MEDIUM_SIZE);
|
m_TargetRangeText->SetSize(HUDText::MEDIUM_SIZE);
|
||||||
m_TargetAlignment = 0;
|
m_TargetAlignment = 0;
|
||||||
@@ -1269,9 +1269,9 @@ HUDTargetDamage::HUDTargetDamage() :
|
|||||||
m_TargetMechID = 0;
|
m_TargetMechID = 0;
|
||||||
|
|
||||||
m_Weapons.clear ();
|
m_Weapons.clear ();
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
VehicleInterface::GetInstance()->hudTargetDamageMode=false;
|
VehicleInterface::GetInstance()->hudTargetDamageMode=false;
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
m_ArmorMode = VehicleInterface::GetInstance()->hudTargetDamageMode;
|
m_ArmorMode = VehicleInterface::GetInstance()->hudTargetDamageMode;
|
||||||
m_LastMechMode = false;
|
m_LastMechMode = false;
|
||||||
}
|
}
|
||||||
@@ -1315,7 +1315,7 @@ void HUDTargetDamage::Reset (void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//sanghoon
|
//상훈
|
||||||
mfd_device.LoadTargetTexture(texturename[m_TargetMechID]);
|
mfd_device.LoadTargetTexture(texturename[m_TargetMechID]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1764,7 +1764,7 @@ if(!hsh_initialized){
|
|||||||
|
|
||||||
if (m_TargetTonnage == -1)
|
if (m_TargetTonnage == -1)
|
||||||
{
|
{
|
||||||
//When target is not a mech..
|
//타켓이 메크가 아닐때..
|
||||||
Verify (!m_ArmorMode); // only mechs show armor mode
|
Verify (!m_ArmorMode); // only mechs show armor mode
|
||||||
if (m_TargetVehicle.GetCurrent()->IsDerivedFrom (MWObject::DefaultData))
|
if (m_TargetVehicle.GetCurrent()->IsDerivedFrom (MWObject::DefaultData))
|
||||||
{
|
{
|
||||||
@@ -1805,7 +1805,7 @@ if(!hsh_initialized){
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//When target is a mech..
|
//타켓이 메크일때..
|
||||||
Verify (m_TargetVehicle.GetCurrent ()->IsDerivedFrom (Mech::DefaultData));
|
Verify (m_TargetVehicle.GetCurrent ()->IsDerivedFrom (Mech::DefaultData));
|
||||||
Mech *mech = Cast_Object(Mech *, m_TargetVehicle.GetCurrent());
|
Mech *mech = Cast_Object(Mech *, m_TargetVehicle.GetCurrent());
|
||||||
Check_Object (mech);
|
Check_Object (mech);
|
||||||
@@ -1826,7 +1826,7 @@ if(!hsh_initialized){
|
|||||||
|
|
||||||
if (m_ArmorMode)
|
if (m_ArmorMode)
|
||||||
{
|
{
|
||||||
//When target is a mech and in armor mode
|
//타켓이 메크이고 아머 모드일때
|
||||||
int x,y;
|
int x,y;
|
||||||
size = m_Textures[20]->Size ();
|
size = m_Textures[20]->Size ();
|
||||||
|
|
||||||
@@ -1897,7 +1897,7 @@ if(!hsh_initialized){
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//sanghoon
|
//상훈
|
||||||
mfd_device.LoadTargetTexture(texturename[m_TargetMechID]);
|
mfd_device.LoadTargetTexture(texturename[m_TargetMechID]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1910,7 +1910,7 @@ if(!hsh_initialized){
|
|||||||
fred = 0;
|
fred = 0;
|
||||||
|
|
||||||
for (i=0;i<11;i++)
|
for (i=0;i<11;i++)
|
||||||
{//What does the number 13 mean here?
|
{//13이라는 숫자가 의미하는 것은 무엇일까?
|
||||||
#if 0
|
#if 0
|
||||||
if (i != fred)
|
if (i != fred)
|
||||||
{
|
{
|
||||||
@@ -1983,7 +1983,7 @@ else
|
|||||||
|
|
||||||
if (m_TargetVehicle.GetCurrent ())
|
if (m_TargetVehicle.GetCurrent ())
|
||||||
{
|
{
|
||||||
//Draw 3D target or 2D target.
|
//3D target 또는 2D Target을 그린다.
|
||||||
if (!m_ArmorMode)
|
if (!m_ArmorMode)
|
||||||
{
|
{
|
||||||
if(g_f3dtarget)
|
if(g_f3dtarget)
|
||||||
@@ -2006,19 +2006,19 @@ else
|
|||||||
int mechindex=GetMechIndex(model->mechID);
|
int mechindex=GetMechIndex(model->mechID);
|
||||||
if(mechindex>=0)
|
if(mechindex>=0)
|
||||||
{
|
{
|
||||||
//Draw only supported mechs.
|
//지원되는 mech만 그린다.
|
||||||
// MSL 5.02 Target MFD Image
|
// MSL 5.02 Target MFD Image
|
||||||
int x=(mechindex%8)*128;
|
int x=(mechindex%8)*128;
|
||||||
int y=(mechindex/8)*128;
|
int y=(mechindex/8)*128;
|
||||||
// int x=(mechindex%4)*128;
|
// int x=(mechindex%4)*128;
|
||||||
// int y=(mechindex/4)*128;
|
// int y=(mechindex/4)*128;
|
||||||
|
|
||||||
//Draw target in 2D.
|
//Target을 2D로 그린다.
|
||||||
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSMechTexture);
|
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSMechTexture);
|
||||||
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, FALSE);
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, FALSE);
|
||||||
mfd_device.pD3DDevice->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTFG_LINEAR);
|
mfd_device.pD3DDevice->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTFG_LINEAR);
|
||||||
mfd_device.pD3DDevice->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTFG_LINEAR);
|
mfd_device.pD3DDevice->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTFG_LINEAR);
|
||||||
//Need to write routine to calculate coordinates per mech type...
|
//메크의 종류별로 좌표를 계산하는.. 루틴을 작성하여 집어 넣을것...
|
||||||
// MSL 5.02 Target MFD Image
|
// MSL 5.02 Target MFD Image
|
||||||
mfd_device.tw=1024,mfd_device.th=1024;
|
mfd_device.tw=1024,mfd_device.th=1024;
|
||||||
// MSL 5.02 Target MFD Image Resize
|
// MSL 5.02 Target MFD Image Resize
|
||||||
@@ -2060,7 +2060,7 @@ else
|
|||||||
radar_device.pDDSTarget->Blt(&rc,NULL,NULL,DDBLT_COLORFILL ,&fx);
|
radar_device.pDDSTarget->Blt(&rc,NULL,NULL,DDBLT_COLORFILL ,&fx);
|
||||||
|
|
||||||
for (int i=0;i<11;i++)
|
for (int i=0;i<11;i++)
|
||||||
{//What does the number 13 mean here?
|
{//13이라는 숫자가 의미하는 것은 무엇일까?
|
||||||
int dv=m_DamageValues[i];
|
int dv=m_DamageValues[i];
|
||||||
DWORD color=0xFF000000;
|
DWORD color=0xFF000000;
|
||||||
if(0<=dv && dv<=5)
|
if(0<=dv && dv<=5)
|
||||||
@@ -2103,7 +2103,7 @@ else
|
|||||||
if (m_ShowData)
|
if (m_ShowData)
|
||||||
{
|
{
|
||||||
|
|
||||||
//Routine to display weapon status of target in lower-left..
|
//좌측 하단의 target의 무기의 상태를 표시하는 루틴..
|
||||||
if (!m_ArmorMode)
|
if (!m_ArmorMode)
|
||||||
{
|
{
|
||||||
stlport::vector<WeaponData>::iterator iter;
|
stlport::vector<WeaponData>::iterator iter;
|
||||||
@@ -2134,7 +2134,7 @@ else
|
|||||||
|
|
||||||
if (m_TargetTonnage == -1)
|
if (m_TargetTonnage == -1)
|
||||||
{
|
{
|
||||||
//When target is not a mech..
|
//타켓이 메크가 아닐때..
|
||||||
Verify (!m_ArmorMode); // only mechs show armor mode
|
Verify (!m_ArmorMode); // only mechs show armor mode
|
||||||
if (m_TargetVehicle.GetCurrent()->IsDerivedFrom (MWObject::DefaultData))
|
if (m_TargetVehicle.GetCurrent()->IsDerivedFrom (MWObject::DefaultData))
|
||||||
{
|
{
|
||||||
@@ -2145,7 +2145,7 @@ else
|
|||||||
m_ArmorValues[0] = (veh->m_HitPoints / veh->m_MaxHitPoints);
|
m_ArmorValues[0] = (veh->m_HitPoints / veh->m_MaxHitPoints);
|
||||||
if (m_ArmorValues[0] != -1)
|
if (m_ArmorValues[0] != -1)
|
||||||
{
|
{
|
||||||
//Draw damage bar graph. Height and color are expressed simultaneously.
|
//데미지 막대 그래프를 그린다. 높이와 색상 동시에 표현된다.
|
||||||
int level;
|
int level;
|
||||||
level = (int) ((m_ArmorValues[0]*(MAX_HUD_DAMAGE_LEVEL))+0.5f);
|
level = (int) ((m_ArmorValues[0]*(MAX_HUD_DAMAGE_LEVEL))+0.5f);
|
||||||
level = MAX_HUD_DAMAGE_LEVEL - level;
|
level = MAX_HUD_DAMAGE_LEVEL - level;
|
||||||
@@ -2160,7 +2160,7 @@ else
|
|||||||
}//When the target is not a mech.
|
}//When the target is not a mech.
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//When target is a mech..
|
//타켓이 메크일때..
|
||||||
Verify (m_TargetVehicle.GetCurrent ()->IsDerivedFrom (Mech::DefaultData));
|
Verify (m_TargetVehicle.GetCurrent ()->IsDerivedFrom (Mech::DefaultData));
|
||||||
Mech *mech = Cast_Object(Mech *, m_TargetVehicle.GetCurrent());
|
Mech *mech = Cast_Object(Mech *, m_TargetVehicle.GetCurrent());
|
||||||
Check_Object (mech);
|
Check_Object (mech);
|
||||||
@@ -2178,7 +2178,7 @@ else
|
|||||||
|
|
||||||
if (m_ArmorMode)
|
if (m_ArmorMode)
|
||||||
{
|
{
|
||||||
//When target is a mech and in armor mode
|
//타켓이 메크이고 아머 모드일때
|
||||||
for (i=0;i<MAX_HUD_DAMAGE_ZONE;i++)
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE;i++)
|
||||||
{
|
{
|
||||||
int tr=trans_array[i];
|
int tr=trans_array[i];
|
||||||
@@ -2208,12 +2208,12 @@ else
|
|||||||
// MSL 5.03 Target Damage Display
|
// MSL 5.03 Target Damage Display
|
||||||
mfd_device.LoadTargetTexture(texturename[m_TargetMechID]);
|
mfd_device.LoadTargetTexture(texturename[m_TargetMechID]);
|
||||||
|
|
||||||
//When target is a mech and NOT in armor mode..
|
//타켓이 메크이고 아머 모드가 아닐때..
|
||||||
if(mfd_device.pDDSTargetTexture==0)
|
if(mfd_device.pDDSTargetTexture==0)
|
||||||
mfd_device.LoadTargetTexture(texturename[m_TargetMechID]);
|
mfd_device.LoadTargetTexture(texturename[m_TargetMechID]);
|
||||||
|
|
||||||
for (i=0;i<11;i++)
|
for (i=0;i<11;i++)
|
||||||
{//What does the number 13 mean here?
|
{//13이라는 숫자가 의미하는 것은 무엇일까?
|
||||||
int dv=m_DamageValues[i];
|
int dv=m_DamageValues[i];
|
||||||
DWORD color=0xFF000000;
|
DWORD color=0xFF000000;
|
||||||
if(0<=dv && dv<=5)color=SH_DamageColor[dv];
|
if(0<=dv && dv<=5)color=SH_DamageColor[dv];
|
||||||
|
|||||||
@@ -77,11 +77,11 @@ namespace MechWarrior4
|
|||||||
int m_TargetMechID;
|
int m_TargetMechID;
|
||||||
bool m_ShowData;
|
bool m_ShowData;
|
||||||
bool m_LastMechMode;
|
bool m_LastMechMode;
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
public:
|
public:
|
||||||
char hsh_targetname[64];
|
char hsh_targetname[64];
|
||||||
char hsh_targetrange[64];
|
char hsh_targetrange[64];
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HUDTargetDamage();
|
HUDTargetDamage();
|
||||||
@@ -97,10 +97,10 @@ namespace MechWarrior4
|
|||||||
void TargetName (char *name)
|
void TargetName (char *name)
|
||||||
{
|
{
|
||||||
m_TargetName->UpdateText (name);
|
m_TargetName->UpdateText (name);
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
strncpy(hsh_targetname,name,sizeof(hsh_targetname));
|
strncpy(hsh_targetname,name,sizeof(hsh_targetname));
|
||||||
hsh_targetname[sizeof(hsh_targetname)-1]=0;
|
hsh_targetname[sizeof(hsh_targetname)-1]=0;
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
}
|
}
|
||||||
void TargetRange (Stuff::Scalar value)
|
void TargetRange (Stuff::Scalar value)
|
||||||
{
|
{
|
||||||
@@ -108,10 +108,10 @@ namespace MechWarrior4
|
|||||||
int temp = (int) value;
|
int temp = (int) value;
|
||||||
sprintf (text,"%dm",temp);
|
sprintf (text,"%dm",temp);
|
||||||
m_TargetRangeText->UpdateText (text);
|
m_TargetRangeText->UpdateText (text);
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
strncpy(hsh_targetrange,text,sizeof(hsh_targetrange));
|
strncpy(hsh_targetrange,text,sizeof(hsh_targetrange));
|
||||||
hsh_targetrange[sizeof(hsh_targetrange)-1]=0;
|
hsh_targetrange[sizeof(hsh_targetrange)-1]=0;
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
}
|
}
|
||||||
void TargetTonnage (Stuff::Scalar value);
|
void TargetTonnage (Stuff::Scalar value);
|
||||||
void TargetAlignment (int value)
|
void TargetAlignment (int value)
|
||||||
|
|||||||
@@ -8,14 +8,14 @@
|
|||||||
#include "mwapplication.hpp"
|
#include "mwapplication.hpp"
|
||||||
// MSL 5.02 Nav Points
|
// MSL 5.02 Nav Points
|
||||||
#include "navpoint.hpp"
|
#include "navpoint.hpp"
|
||||||
//sanghoon begin
|
//상훈짱 begin
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <ddraw.h>
|
#include <ddraw.h>
|
||||||
#include <d3d.h>
|
#include <d3d.h>
|
||||||
|
|
||||||
#include <GameOS\render.hpp>
|
#include <GameOS\render.hpp>
|
||||||
extern char AssetsDirectory1[MAX_PATH];
|
extern char AssetsDirectory1[MAX_PATH];
|
||||||
//sanghoon end
|
//상훈짱 end
|
||||||
|
|
||||||
const Stuff::Time SHOT_TIME = 2.0;
|
const Stuff::Time SHOT_TIME = 2.0;
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ HUDMap::HUDMap():
|
|||||||
AddTexture ("hud\\map",0,28,28,228,228);
|
AddTexture ("hud\\map",0,28,28,228,228);
|
||||||
else{
|
else{
|
||||||
AddTexture (model->m_HudMap,0,0,0,255,255);
|
AddTexture (model->m_HudMap,0,0,0,255,255);
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
radar_device.MapDrawn=false;
|
radar_device.MapDrawn=false;
|
||||||
/*
|
/*
|
||||||
if(hsh_initialized){
|
if(hsh_initialized){
|
||||||
@@ -49,7 +49,7 @@ HUDMap::HUDMap():
|
|||||||
radar_device.MapDrawn=true;
|
radar_device.MapDrawn=true;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
}
|
}
|
||||||
|
|
||||||
Location (Point3D (301,399,0.9f));
|
Location (Point3D (301,399,0.9f));
|
||||||
@@ -154,7 +154,7 @@ void HUDMap::DrawImplementation(void)
|
|||||||
Point3D loc,size;
|
Point3D loc,size;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
//Draw the map.
|
//맵을 그린다.
|
||||||
Vehicle *vehicle = m_Vehicle.GetCurrent();
|
Vehicle *vehicle = m_Vehicle.GetCurrent();
|
||||||
|
|
||||||
loc = Location ();
|
loc = Location ();
|
||||||
@@ -163,7 +163,7 @@ void HUDMap::DrawImplementation(void)
|
|||||||
// loc.y -= (size.y/2.0f);
|
// loc.y -= (size.y/2.0f);
|
||||||
m_Textures[0]->Draw (loc,size,MakeColor (255,255,255,255),HUDTexture::NO_FLIP,true);
|
m_Textures[0]->Draw (loc,size,MakeColor (255,255,255,255),HUDTexture::NO_FLIP,true);
|
||||||
|
|
||||||
//Display Torso Sweep (pie-shaped field-of-view indicator).
|
//Torso Sweep(파이모양 시야각 표시도형)을 표시한다.
|
||||||
if (NULL == vehicle)
|
if (NULL == vehicle)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -214,7 +214,7 @@ void HUDMap::DrawImplementation(void)
|
|||||||
|
|
||||||
|
|
||||||
//Draw Radar Blips
|
//Draw Radar Blips
|
||||||
//Display radar objects.
|
//레이다의 오브젝트들을 표시한다.
|
||||||
|
|
||||||
MWObject *current_object;
|
MWObject *current_object;
|
||||||
for(i=0;i<vehicle->GetSensor()->numberOfContacts;i++)
|
for(i=0;i<vehicle->GetSensor()->numberOfContacts;i++)
|
||||||
@@ -332,7 +332,7 @@ void HUDMap::DrawImplementation(void)
|
|||||||
color = MakeColor (255,255,255,250);
|
color = MakeColor (255,255,255,250);
|
||||||
m_Textures[id+20]->Draw (Point3D (object_display_pos.x,object_display_pos.y,0.9f),size,color,HUDTexture::NO_FLIP,true);
|
m_Textures[id+20]->Draw (Point3D (object_display_pos.x,object_display_pos.y,0.9f),size,color,HUDTexture::NO_FLIP,true);
|
||||||
}
|
}
|
||||||
//Operation boundary display polygon (orange-red)
|
//작전 범위(Boundary) 표시 다각형(주황빨강)
|
||||||
size = Size ();
|
size = Size ();
|
||||||
loc = Location ();
|
loc = Location ();
|
||||||
Mission *miss;
|
Mission *miss;
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ namespace MechWarrior4
|
|||||||
void DrawImplementation(void);
|
void DrawImplementation(void);
|
||||||
void ConvertMapCoords (float& x,float& y);
|
void ConvertMapCoords (float& x,float& y);
|
||||||
void ConvertMapCoords (Point3D& pt);
|
void ConvertMapCoords (Point3D& pt);
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
bool hsh_fdraw;
|
bool hsh_fdraw;
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HUDMap();
|
HUDMap();
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ get_score:
|
|||||||
HUDScore::HUDScore()
|
HUDScore::HUDScore()
|
||||||
{
|
{
|
||||||
m_AnimTime = 0;
|
m_AnimTime = 0;
|
||||||
//sanghoon
|
//상훈
|
||||||
Location (Point3D (0,0,0.9f));
|
Location (Point3D (0,0,0.9f));
|
||||||
// Location (Point3D (200,100,0.9f));
|
// Location (Point3D (200,100,0.9f));
|
||||||
Size (Point3D (310,300,0.9f));
|
Size (Point3D (310,300,0.9f));
|
||||||
@@ -128,7 +128,7 @@ HUDScore::HUDScore()
|
|||||||
|
|
||||||
m_PingHeader = new HUDText ();
|
m_PingHeader = new HUDText ();
|
||||||
m_PingHeader ->SetAsAlt();
|
m_PingHeader ->SetAsAlt();
|
||||||
//sanghoon
|
//상훈
|
||||||
/*
|
/*
|
||||||
m_PingHeader->Justification (HUDText::LEFT_ALIGN);
|
m_PingHeader->Justification (HUDText::LEFT_ALIGN);
|
||||||
m_PingHeader->UpdateText (app->GetLocString (IDS_PINGHEADER));
|
m_PingHeader->UpdateText (app->GetLocString (IDS_PINGHEADER));
|
||||||
@@ -444,7 +444,7 @@ void HUDScore::DrawImplementation(void)
|
|||||||
m_TimeLeftText->UpdateText (text);
|
m_TimeLeftText->UpdateText (text);
|
||||||
}
|
}
|
||||||
|
|
||||||
//sanghoon
|
//상훈
|
||||||
count+=1;
|
count+=1;
|
||||||
loc = Location ();
|
loc = Location ();
|
||||||
loc.y=600-count*LINE_HEIGHT;
|
loc.y=600-count*LINE_HEIGHT;
|
||||||
@@ -455,7 +455,7 @@ void HUDScore::DrawImplementation(void)
|
|||||||
|
|
||||||
DWORD bcolor = BrighterColor (Color ());
|
DWORD bcolor = BrighterColor (Color ());
|
||||||
|
|
||||||
//sanghoon
|
//상훈..
|
||||||
{
|
{
|
||||||
Stuff::Point3D loc2(800-size.x,600-LINE_HEIGHT-1,0.9f);
|
Stuff::Point3D loc2(800-size.x,600-LINE_HEIGHT-1,0.9f);
|
||||||
LDrawRect (loc2,0,0,size.x,LINE_HEIGHT,MakeColor (0,150,0,128));
|
LDrawRect (loc2,0,0,size.x,LINE_HEIGHT,MakeColor (0,150,0,128));
|
||||||
@@ -481,7 +481,7 @@ void HUDScore::DrawImplementation(void)
|
|||||||
m_PlayerTitle->Draw (Point3D (loc.x+10,yvalue,0.9f));
|
m_PlayerTitle->Draw (Point3D (loc.x+10,yvalue,0.9f));
|
||||||
|
|
||||||
DWORD h;
|
DWORD h;
|
||||||
//sanghoon
|
//상훈
|
||||||
//m_PingHeader->DrawSize (pingwidth,h);
|
//m_PingHeader->DrawSize (pingwidth,h);
|
||||||
//pingx = loc.x + size.x - pingwidth - 10;
|
//pingx = loc.x + size.x - pingwidth - 10;
|
||||||
pingx = loc.x + size.x ;
|
pingx = loc.x + size.x ;
|
||||||
|
|||||||
@@ -367,10 +367,10 @@ void HUDReticle::DrawImplementation(void)
|
|||||||
m_Textures[36]->Draw (loc,size,m_LeftCenterColor);
|
m_Textures[36]->Draw (loc,size,m_LeftCenterColor);
|
||||||
m_Textures[37]->Draw (loc,size,m_RightCenterColor);
|
m_Textures[37]->Draw (loc,size,m_RightCenterColor);
|
||||||
|
|
||||||
for (i=0;i<3;i++)//sanghoon: originally 6
|
for (i=0;i<3;i++)//상훈 원래 6이었음
|
||||||
{
|
{
|
||||||
size = m_Textures[20+i]->Size ();
|
size = m_Textures[20+i]->Size ();
|
||||||
//CanHit is set in Hudweapon...
|
//CanHit는 Hudweapon에서 set한다...
|
||||||
if (m_Weapons->CanHit (i))
|
if (m_Weapons->CanHit (i))
|
||||||
color = MakeColor (0,255,0,255);
|
color = MakeColor (0,255,0,255);
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -15,14 +15,14 @@ static float RECOVER_FROM_JAMMING_TIME = 5.0f;
|
|||||||
// MSL 5.03 Ammo Bay Fire
|
// MSL 5.03 Ammo Bay Fire
|
||||||
static float TIME_AMMO_BAY_FIRE = 7.0f;
|
static float TIME_AMMO_BAY_FIRE = 7.0f;
|
||||||
|
|
||||||
//sanghoon begin
|
//상훈짱 begin
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <ddraw.h>
|
#include <ddraw.h>
|
||||||
#include <d3d.h>
|
#include <d3d.h>
|
||||||
|
|
||||||
#include <GameOS\render.hpp>
|
#include <GameOS\render.hpp>
|
||||||
extern bool g_bNoWeaponRangeCheck;
|
extern bool g_bNoWeaponRangeCheck;
|
||||||
//sanghoon end
|
//상훈짱 end
|
||||||
|
|
||||||
static void MakeStringCaps(char* buffer)
|
static void MakeStringCaps(char* buffer)
|
||||||
{
|
{
|
||||||
@@ -555,7 +555,7 @@ if(mfd_device.BeginChannel(4))
|
|||||||
|
|
||||||
|
|
||||||
int rh=25;//row_height
|
int rh=25;//row_height
|
||||||
//Assumes up to 16 rows (including header row).
|
//16개의 row를 가질수 있는것으로 가정한다.(row포함)
|
||||||
// background boxes
|
// background boxes
|
||||||
|
|
||||||
mfd_device.DrawQuad(0+lm,0+tm,96+lm,(totalcount+1)*rh+10+tm,0xFF404040);
|
mfd_device.DrawQuad(0+lm,0+tm,96+lm,(totalcount+1)*rh+10+tm,0xFF404040);
|
||||||
@@ -609,13 +609,13 @@ if(mfd_device.BeginChannel(4))
|
|||||||
|
|
||||||
DWORD hsh_color1=0,hsh_color2=0;
|
DWORD hsh_color1=0,hsh_color2=0;
|
||||||
|
|
||||||
//Weapon fire-ready status: define exact color for each state.
|
//무기 발사가능 상태: 각각의 색상에 대해 정확히 정의 할것.
|
||||||
|
|
||||||
//Normal (target in range)(can fire) 0xFFFFFFFF
|
//정상(타겟안에 있음)(발사가능) 0xFFFFFFFF
|
||||||
//Normal (target out of range)(can fire) 0xFFFFFFFF
|
//정상(타겟밖에 있음)(발사가능) 0xFFFFFFFF
|
||||||
//Reloading (cannot fire) 0xFFA0A0A0
|
//로딩중(발사 불가) 0xFFA0A0A0
|
||||||
//Out of ammo (cannot fire) 0xFF808080
|
//탄알이 떨어짐(발사불가) 0xFF808080
|
||||||
//Destroyed (cannot fire) 0xFF606060
|
//고장남(발사불가) 0xFF606060
|
||||||
DWORD nameheight=30;
|
DWORD nameheight=30;
|
||||||
int top=5+(weapony+1)*rh;
|
int top=5+(weapony+1)*rh;
|
||||||
int bottom = top+rh;
|
int bottom = top+rh;
|
||||||
@@ -694,7 +694,7 @@ if(mfd_device.BeginChannel(4))
|
|||||||
char *weapon_string[3]={"1","2","3"};
|
char *weapon_string[3]={"1","2","3"};
|
||||||
|
|
||||||
|
|
||||||
//Display the status of the weapon group.
|
//해당 무기의 그룹의 상태를 표시한다.
|
||||||
for(int i=0;i<3;i++){
|
for(int i=0;i<3;i++){
|
||||||
DWORD weapon_color=weapon_flag[i]?normal_color:nogroup_color;
|
DWORD weapon_color=weapon_flag[i]?normal_color:nogroup_color;
|
||||||
// MSL 5.00 Added Ammocount check, if = 0 then weapon name same as ammo nogroup_color
|
// MSL 5.00 Added Ammocount check, if = 0 then weapon name same as ammo nogroup_color
|
||||||
@@ -707,7 +707,7 @@ if(mfd_device.BeginChannel(4))
|
|||||||
|
|
||||||
Point3D numsize = m_Textures[20]->Size ();
|
Point3D numsize = m_Textures[20]->Size ();
|
||||||
|
|
||||||
//Display weapon name.
|
//무기 이름을 표시한다.
|
||||||
// MSL 5.00 Added Ammocount check, if = 0 then weapon name same as ammo out_color
|
// MSL 5.00 Added Ammocount check, if = 0 then weapon name same as ammo out_color
|
||||||
switch (weapon->m_status)
|
switch (weapon->m_status)
|
||||||
{
|
{
|
||||||
@@ -786,7 +786,7 @@ if(mfd_device.BeginChannel(4))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Display frame for the selected weapon currently fired with Enter.
|
//현재 엔터키로 발사되는 선택된 무기에 대해서 프레임을 표시한다.
|
||||||
if (weapon->m_weapon == m_SingleFire.GetCurrent ()){
|
if (weapon->m_weapon == m_SingleFire.GetCurrent ()){
|
||||||
mfd_device.DrawFrame(155+lm,top+1+tm,545+lm,bottom-1+tm,0xFFFFFFFF);
|
mfd_device.DrawFrame(155+lm,top+1+tm,545+lm,bottom-1+tm,0xFFFFFFFF);
|
||||||
}
|
}
|
||||||
@@ -795,7 +795,7 @@ if(mfd_device.BeginChannel(4))
|
|||||||
if ((ammocount > -1) && (weapon->m_status != 2)){
|
if ((ammocount > -1) && (weapon->m_status != 2)){
|
||||||
mfd_device.pFont[0].DrawText(615-5+lm,center+tm,ammocount_color,text,TEXTALIGN_VCENTER|TEXTALIGN_RIGHT);
|
mfd_device.pFont[0].DrawText(615-5+lm,center+tm,ammocount_color,text,TEXTALIGN_VCENTER|TEXTALIGN_RIGHT);
|
||||||
}else if (ammocount == -1){
|
}else if (ammocount == -1){
|
||||||
//Display '-' for weapon types with unlimited ammo.
|
//무기수가 제한이 없는 무기의 종류에는 '-'를 표시한다.
|
||||||
mfd_device.pFont[0].DrawText(615-5+lm,center+tm,ammocount_color,"-",TEXTALIGN_VCENTER|TEXTALIGN_RIGHT);
|
mfd_device.pFont[0].DrawText(615-5+lm,center+tm,ammocount_color,"-",TEXTALIGN_VCENTER|TEXTALIGN_RIGHT);
|
||||||
}
|
}
|
||||||
weapony ++;
|
weapony ++;
|
||||||
|
|||||||
@@ -1008,27 +1008,27 @@ const char* ArmorZoneStr(int nArmorZone)
|
|||||||
case Adept::DamageObject::NullArmorZone:
|
case Adept::DamageObject::NullArmorZone:
|
||||||
return "()";
|
return "()";
|
||||||
case Adept::DamageObject::LeftLegArmorZone:
|
case Adept::DamageObject::LeftLegArmorZone:
|
||||||
return "Left Leg";
|
return "왼발";
|
||||||
case Adept::DamageObject::RightLegArmorZone:
|
case Adept::DamageObject::RightLegArmorZone:
|
||||||
return "Right Leg";
|
return "오른발";
|
||||||
case Adept::DamageObject::LeftArmArmorZone:
|
case Adept::DamageObject::LeftArmArmorZone:
|
||||||
return "Left Arm";
|
return "왼팔";
|
||||||
case Adept::DamageObject::RightArmArmorZone:
|
case Adept::DamageObject::RightArmArmorZone:
|
||||||
return "Right Arm";
|
return "오른팔";
|
||||||
case Adept::DamageObject::RightTorsoArmorZone:
|
case Adept::DamageObject::RightTorsoArmorZone:
|
||||||
return "Right Torso";
|
return "우측";
|
||||||
case Adept::DamageObject::LeftTorsoArmorZone:
|
case Adept::DamageObject::LeftTorsoArmorZone:
|
||||||
return "Left Torso";
|
return "좌측";
|
||||||
case Adept::DamageObject::CenterTorsoArmorZone:
|
case Adept::DamageObject::CenterTorsoArmorZone:
|
||||||
return "Front";
|
return "전면";
|
||||||
case Adept::DamageObject::CenterRearTorsoArmorZone:
|
case Adept::DamageObject::CenterRearTorsoArmorZone:
|
||||||
return "Rear";
|
return "후면";
|
||||||
case Adept::DamageObject::HeadArmorZone:
|
case Adept::DamageObject::HeadArmorZone:
|
||||||
return "Head";
|
return "머리";
|
||||||
case Adept::DamageObject::SpecialArmorZone1:
|
case Adept::DamageObject::SpecialArmorZone1:
|
||||||
return "Aux Device 1";
|
return "보조장치1";
|
||||||
case Adept::DamageObject::SpecialArmorZone2:
|
case Adept::DamageObject::SpecialArmorZone2:
|
||||||
return "Aux Device 2";
|
return "보조장치2";
|
||||||
case Adept::DamageObject::DefaultArmorZone:
|
case Adept::DamageObject::DefaultArmorZone:
|
||||||
return "Default";
|
return "Default";
|
||||||
}
|
}
|
||||||
@@ -1990,83 +1990,83 @@ public:
|
|||||||
static SMSGFMT s_aKill[20][2] = {
|
static SMSGFMT s_aKill[20][2] = {
|
||||||
{
|
{
|
||||||
{ "%s's %s destroys %s's %s!", 0 }, // ok!
|
{ "%s's %s destroys %s's %s!", 0 }, // ok!
|
||||||
{ "%s's %s destroyed %s's %s!", 0 }, // ok!
|
{ "%s의 %s, %s의 %s을(를) 파괴하다!", 0 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s's %s explodes in a fire-ball, thanks to %s.", 1 }, // ok!
|
{ "%s's %s explodes in a fire-ball, thanks to %s.", 1 }, // ok!
|
||||||
{ "%s's %s explodes in flames! %s lands a perfect hit!", 1 }, // ok!
|
{ "%s의 %s, 각 기관부의 화염으로 폭발! %s의 절묘한 공격성공!", 1 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s delivers the last blow as %s's %s explodes in flames!", 2 }, // ok!
|
{ "%s delivers the last blow as %s's %s explodes in flames!", 2 }, // ok!
|
||||||
{ "%s took a hit to %s's %s!", 2 - 100}, // ok!
|
{ "%s는 %s의 %s에!", 2 - 100}, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Smoking wreckage is all that's left of %s's %s after %s delivers the fatal blow!", 1 },
|
{ "Smoking wreckage is all that's left of %s's %s after %s delivers the fatal blow!", 1 },
|
||||||
{ "%s's merciless assault leaves only burning wreckage of %s's %s.", 2 }, // ok!
|
{ "%s의 무자비한 공격으로 %s의 %s 불타는 잔해만 남길 것이다.", 2 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Glorious victory goes to %s as the wreckage from %s's %s lies burning on the battlefield!", 2 },
|
{ "Glorious victory goes to %s as the wreckage from %s's %s lies burning on the battlefield!", 2 },
|
||||||
{ "The battle escalates rapidly - %s's survival probability is 0%%!", 8 }, // ok!
|
{ "전황은 급속도로 진전, %s의 생존가능성은 0%%!", 8 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s's %s is put out of it's misery by a devastating shot from %s.", 1 },
|
{ "%s's %s is put out of it's misery by a devastating shot from %s.", 1 },
|
||||||
{ "Under %s's overwhelming firepower, %s crumbles miserably.", 4 }, // ok!
|
{ "%s의 압도적인 화력 앞에 %s 처참히 무너지고 있다.", 4 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s racks up another kill marker from reducing %s's %s to rubble!", 2 },
|
{ "%s racks up another kill marker from reducing %s's %s to rubble!", 2 },
|
||||||
{ "%s knocked out %s's %s and earned a new kill mark.", 2 }, // ok!
|
{ "%s %s의 %s을(를) 때려 눕히고, 새로운 킬마크를 얻었다.", 2 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Fresh paint is applied to %s's %s to mark the destruction of %s's %s!", 0 }, // ok!
|
{ "Fresh paint is applied to %s's %s to mark the destruction of %s's %s!", 0 }, // ok!
|
||||||
{ "%s added a kill mark on %s for shooting down %s.", 0 - 100 },
|
{ "%s는 %s를 격추한 킬마크를 %s에 추가했다.", 0 - 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "The burning wreckage of %s's %s is a reminder to all of the prowess of %s's battle skills!", 1 },
|
{ "The burning wreckage of %s's %s is a reminder to all of the prowess of %s's battle skills!", 1 },
|
||||||
{ "The wreckage of %s will be %s's trophy of victory.", 7 }, // ok!
|
{ "%s의 잔해는 %s이(가) 가져갈 승리의 기념품이 될것이다.", 7 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "The thunderous explosion of %s's %s is music to the ears of %s!", 1 },
|
{ "The thunderous explosion of %s's %s is music to the ears of %s!", 1 },
|
||||||
{ "A death prelude echoes in %s's ears. The conductor: %s.", 7 }, // ok!
|
{ "%s의 귀에 들려오는 죽음의 전주곡. 지휘자는 %s.", 7 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s's %s is destroyed by %s's %s.", 3 },
|
{ "%s's %s is destroyed by %s's %s.", 3 },
|
||||||
{ "%s's %s was destroyed by %s's %s.", 3 }, // ok!
|
{ "%s'의 %s, %s의 %s에게 파괴되었다.", 3 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s brings the four horseman of the apocalypse down upon %s.", 4 },
|
{ "%s brings the four horseman of the apocalypse down upon %s.", 4 },
|
||||||
{ "The pendulum of judgment swung by %s strikes %s.", 4 }, // ok!
|
{ "%s(이)가 휘두르는 심판의 추가 %s에게 작렬했다.", 4 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s's life flashes as %s reduces the %s to a burning wreck.", 5 },
|
{ "%s's life flashes as %s reduces the %s to a burning wreck.", 5 },
|
||||||
{ "On %s's last lifeline, %s!", 7 - 100 }, // ok!
|
{ "%s의 마지막 생명줄에, %s !", 7 - 100 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s is deafened by the resounding roar of the exploding %s, thanks to %s.", 1 },
|
{ "%s is deafened by the resounding roar of the exploding %s, thanks to %s.", 1 },
|
||||||
{ "%s's mech explodes skyward. Glory to %s!", 7 }, // ok!
|
{ "%s 기체의 폭발소리와 함께, 저 하늘로 날아갔다. %s에게 영광을!", 7 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "A kill marker is placed on %s's %s to mark the victory over %s.", 6 },
|
{ "A kill marker is placed on %s's %s to mark the victory over %s.", 6 },
|
||||||
{ "A new kill mark should be added to %s's %s, victim: %s", 6 }, // ok!
|
{ "%s의 %s에 새로운 킬마크를 추가해야 할 듯, 희생자는 %s", 6 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s is delivered unto the inferno with regards from %s.", 7 },
|
{ "%s is delivered unto the inferno with regards from %s.", 7 },
|
||||||
{ "%s headed to hell under %s's escort. Rest in peace, %s!", 9 }, // ok!
|
{ "%s, %s의 호위하에 지옥으로 향했다. %s에게 명복을!", 9 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Another kill marker is given up by %s, as %s celebrates victory.", 7 },
|
{ "Another kill marker is given up by %s, as %s celebrates victory.", 7 },
|
||||||
{ "%s became %s's new kill mark. Rest in peace...", 7 - 100 },
|
{ "%s, %s의 새로운 킬 마크가 되었다. 영원한 안식을…", 7 - 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Best wishes in the afterlife are presented to %s from %s.", 7 },
|
{ "Best wishes in the afterlife are presented to %s from %s.", 7 },
|
||||||
{ "All that remains for %s is revenge against %s!", 7 }, // ok!
|
{ "%s에게 남은 것은 오직 %s에 대한 복수뿐!", 7 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Tragedy strikes %s as %s guns the %s down.", 5 },
|
{ "Tragedy strikes %s as %s guns the %s down.", 5 },
|
||||||
{ "%s brought all firepower to bear and destroyed %s's %s.", 2 }, // ok!
|
{ "%s 모든 화력을 동원해 %s의 %s을(를) 파괴했다.", 2 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s earns the revenge of %s after the tragic destruction of the %s.", 2 },
|
{ "%s earns the revenge of %s after the tragic destruction of the %s.", 2 },
|
||||||
{ "A tragic end for %s! %s can only watch %s in despair.", 9 }, // ok!
|
{ "%s의 비극적인 최후! %s 절망하는 %s을(를) 지켜볼 뿐이다.", 9 }, // ok!
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2077,11 +2077,11 @@ static SMSGFMT s_aKill[20][2] = {
|
|||||||
static SMSGFMT s_aSuicide[2][2] = {
|
static SMSGFMT s_aSuicide[2][2] = {
|
||||||
{
|
{
|
||||||
{ "%s leaves the battlefield in disgrace after causing the destruction of the %s.", 0 },
|
{ "%s leaves the battlefield in disgrace after causing the destruction of the %s.", 0 },
|
||||||
{ "%s self-destructed! %s left the battlefield in disgrace!", 2 },
|
{ "%s 자폭! %s 불명예스럽게 전장을 떠났다!", 2 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s will not grace the halls of the honored mechwarriors after self-destructing the %s.", 0 },
|
{ "%s will not grace the halls of the honored mechwarriors after self-destructing the %s.", 0 },
|
||||||
{ "%s self-destructed! Coward, do you truly desire victory?", 3 },
|
{ "%s 자폭! 비겁자여, 진실로 승리를 원하는가?", 3 },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2106,43 +2106,43 @@ static SMSGFMT s_aSuicide[2][2] = {
|
|||||||
static SMSGFMT s_aShot[10][2] = {
|
static SMSGFMT s_aShot[10][2] = {
|
||||||
{
|
{
|
||||||
{ "%s's %s fires the %s and damages the %s of %s's %s.", 0 },
|
{ "%s's %s fires the %s and damages the %s of %s's %s.", 0 },
|
||||||
{ "%s attacked %s's %s with %s", 1 }, // ok!
|
{ "%s %s의 %s에 %s으로 공격했다", 1 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s fires the %s's %s and decimates the %s of %s's %s.", 2 },
|
{ "%s fires the %s's %s and decimates the %s of %s's %s.", 2 },
|
||||||
{ "%s piloting %s damaged %s's %s on %s's %s.", 2 },
|
{ "%s이(가) 탑승한 %s, %s로 %s이(가) 탑승한 %s의 %s에 피해를 입혔다.", 2 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s's %s takes a devastating hit in the %s from %s.", 3 },
|
{ "%s's %s takes a devastating hit in the %s from %s.", 3 },
|
||||||
{ "%s's %s took damage to the %s under %s's overwhelming attack.", 4 }, // ok!
|
{ "%s의 %s, %s의 압도적인 공격에 %s에 피해를 입었다.", 4 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s's %s suffers a direct hit to it's %s from %s's %s.", 5 },
|
{ "%s's %s suffers a direct hit to it's %s from %s's %s.", 5 },
|
||||||
{ "%s's %s took direct damage from %s's %s. Damage: %s!", 6 -100},
|
{ "%s의 %s은(는) %s의 %s에 직접적인 피해를 받았다. 피해 %s!", 6 -100},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s damages %s's %s.", 7 },
|
{ "%s damages %s's %s.", 7 },
|
||||||
{ "%s dealt damage to %s's %s..", 7 }, // ok!
|
{ "%s, %s의 %s에 피해를 입혔다..", 7 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Dense black smoke pours from %s's %s as a result of %s's targeted hit.", 8 },
|
{ "Dense black smoke pours from %s's %s as a result of %s's targeted hit.", 8 },
|
||||||
{ "Black smoke billows from %s's %s from %s's precise attack.", 7 }, // ok!
|
{ "%s의 절묘한 공격으로 %s의 %s에서 검은 연기가 퍼지고 있다.", 7 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Fire boils from the damaged %s of %s's %s after %s hits it with a %s.", 9 },
|
{ "Fire boils from the damaged %s of %s's %s after %s hits it with a %s.", 9 },
|
||||||
{ "%s fired %s, dealing damage to the %s of %s's %s.", 10 }, // ok!
|
{ "%s %s을(를) 발사하여, %s이(가) 탑승한 %s의 %s에 피해를 발생시켰다.", 10 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Smoke and fire are trailing from %s's %s, all results of the %s blast inflicted by %s.", 11 },
|
{ "Smoke and fire are trailing from %s's %s, all results of the %s blast inflicted by %s.", 11 },
|
||||||
{ "Fire and smoke engulf %s's mech from %s's %s attack.", 15 }, // ok!
|
{ "%s의 %s 공격에, 불과 연기가 %s의 기체를 뒤덮고 있다.", 15 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s targets and fires the %s; %s cries in dismay as the %s's %s is damaged.", 10 },
|
{ "%s targets and fires the %s; %s cries in dismay as the %s's %s is damaged.", 10 },
|
||||||
{ "%s aimed %s and pulled the trigger, hitting the %s of %s's %s.", 10 }, // ok!
|
{ "%s %s을(를) 조준하여 %s이(가) 탑승한 %s의 %s에 맞춘 후 방아쇠를 당겼다.", 10 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s takes a severe wound to the %s as %s aims for the %s again.", 13 },
|
{ "%s takes a severe wound to the %s as %s aims for the %s again.", 13 },
|
||||||
{ "%s aimed again at %s's %s and fired. %s seems to have taken serious damage to %s.", 14 -100},
|
{ "%s 다시 %s의 %s을(를) 조준하여 사격했다. %s, %s에 심각한 피해를 입은 듯.", 14 -100},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2150,19 +2150,19 @@ static SMSGFMT s_aShot[10][2] = {
|
|||||||
static SMSGFMT s_aCTF[1][2] = {
|
static SMSGFMT s_aCTF[1][2] = {
|
||||||
{
|
{
|
||||||
{ "%s captured flag.", 0 },
|
{ "%s captured flag.", 0 },
|
||||||
{ "%s captured the flag!", 0 },
|
{ "%s, 깃발 획득!.", 0 },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
static SMSGFMT s_aFBK[1][2] = {
|
static SMSGFMT s_aFBK[1][2] = {
|
||||||
{
|
{
|
||||||
{ "%s destroyed friendly building.", 0 },
|
{ "%s destroyed friendly building.", 0 },
|
||||||
{ "%s captured the flag!", 0 },
|
{ "%s, 깃발 획득!.", 0 },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
static SMSGFMT s_aEBK[1][2] = {
|
static SMSGFMT s_aEBK[1][2] = {
|
||||||
{
|
{
|
||||||
{ "%s destroyed enemy building.", 0 },
|
{ "%s destroyed enemy building.", 0 },
|
||||||
{ "%s captured the flag!", 0 },
|
{ "%s, 깃발 획득!.", 0 },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const SMSGFMT* pcFMT;
|
const SMSGFMT* pcFMT;
|
||||||
|
|||||||
@@ -1077,7 +1077,7 @@ int CStrArray::GetTotalLength() const
|
|||||||
int nTotalLength;
|
int nTotalLength;
|
||||||
int i, nSize = GetSize();
|
int i, nSize = GetSize();
|
||||||
|
|
||||||
nTotalLength = nSize; // nSize null terminators '\0'
|
nTotalLength = nSize; // nSize개의 '\0'
|
||||||
for(i = 0; i < nSize; i++) {
|
for(i = 0; i < nSize; i++) {
|
||||||
nTotalLength += strlen(GetAt(i));
|
nTotalLength += strlen(GetAt(i));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#include<Windows.h>
|
#include<Windows.h>
|
||||||
|
|
||||||
//
|
//
|
||||||
//Do not use ....\EulaTest\\1.0 as the key for your game; use your game name and version instead...
|
//Do not use ….\EulaTest\\1.0 as the key for your game; use your game name and version instead…
|
||||||
|
|
||||||
// PLEASE NOTE: do not place backslashes on beginning or end of regkey.
|
// PLEASE NOTE: do not place backslashes on beginning or end of regkey.
|
||||||
//
|
//
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
typedef DWORD (*EBUPROC) (LPCTSTR lpRegKeyLocation, LPCTSTR lpEULAFileName, LPCSTR lpWarrantyFileName, BOOL fCheckForFirstRun);
|
typedef DWORD (*EBUPROC) (LPCTSTR lpRegKeyLocation, LPCTSTR lpEULAFileName, LPCSTR lpWarrantyFileName, BOOL fCheckForFirstRun);
|
||||||
|
|
||||||
//
|
//
|
||||||
//The game application's .RC file should define strings for the EULA and WARRANTY pathnames...
|
//The game application’s .RC file should define strings for the EULA and WARRANTY pathnames…
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
@@ -28,13 +28,13 @@ bool FirstRunEula(const char *eula_filename,const char *warranty_filename)
|
|||||||
if (NULL == hMod)
|
if (NULL == hMod)
|
||||||
hMod = LoadLibrary("EBUEula.dll");
|
hMod = LoadLibrary("EBUEula.dll");
|
||||||
|
|
||||||
if (NULL == hMod) // can't attach to DLL
|
if (NULL == hMod) // can’t attach to DLL
|
||||||
{
|
{
|
||||||
STOP(("Cannot Load EBUEula.dll"));
|
STOP(("Cannot Load EBUEula.dll"));
|
||||||
}
|
}
|
||||||
pfnEBUEula = (EBUPROC) GetProcAddress(hMod, "EBUEula");
|
pfnEBUEula = (EBUPROC) GetProcAddress(hMod, "EBUEula");
|
||||||
|
|
||||||
if (NULL == pfnEBUEula) // can't find entry point
|
if (NULL == pfnEBUEula) // can’t find entry point
|
||||||
{
|
{
|
||||||
FreeLibrary(hMod);
|
FreeLibrary(hMod);
|
||||||
STOP(("Cannot Find Entry Point to EBUEula.dll"));
|
STOP(("Cannot Find Entry Point to EBUEula.dll"));
|
||||||
@@ -43,9 +43,9 @@ bool FirstRunEula(const char *eula_filename,const char *warranty_filename)
|
|||||||
|
|
||||||
//
|
//
|
||||||
//This call enables both EULA and warranty accepting/viewing/printing. If your
|
//This call enables both EULA and warranty accepting/viewing/printing. If your
|
||||||
//game doesn't ship with a WARRANTY file, specifiy NULL instead of szWarranty...
|
//game doesn’t ship with a WARRANTY file, specifiy NULL instead of szWarranty…
|
||||||
|
|
||||||
//The code below, for instance, works with both OEM and retail builds...
|
//The code below, for instance, works with both OEM and retail builds…
|
||||||
|
|
||||||
//
|
//
|
||||||
const char *pszWarrantyParam = 0xFFFFFFFF != GetFileAttributes(warranty_filename) ? warranty_filename : NULL;
|
const char *pszWarrantyParam = 0xFFFFFFFF != GetFileAttributes(warranty_filename) ? warranty_filename : NULL;
|
||||||
|
|||||||
@@ -190,10 +190,10 @@ int bloatSizeTable[8] = {
|
|||||||
extern bool(__cdecl *NoCDMessageFunction)(void);
|
extern bool(__cdecl *NoCDMessageFunction)(void);
|
||||||
|
|
||||||
extern bool gNoDialogs;
|
extern bool gNoDialogs;
|
||||||
//sanghoon begin
|
//상훈.. begin
|
||||||
extern bool use_shgui;
|
extern bool use_shgui;
|
||||||
extern int SCREENS;
|
extern int SCREENS;
|
||||||
//sanghoon end
|
//상훈.. end
|
||||||
|
|
||||||
bool gRunEula=true;
|
bool gRunEula=true;
|
||||||
bool gNoCD=false;
|
bool gNoCD=false;
|
||||||
@@ -290,13 +290,13 @@ void _stdcall InitializeGameEngine()
|
|||||||
|
|
||||||
|
|
||||||
// bool needflip=Environment.fullScreen && IsFirstRun();
|
// bool needflip=Environment.fullScreen && IsFirstRun();
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
bool needflip=false;
|
bool needflip=false;
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
if(needflip){
|
if(needflip){
|
||||||
//sanghoon begin
|
//상훈 앞
|
||||||
//MessageBeep(MB_ICONEXCLAMATION);
|
//MessageBeep(MB_ICONEXCLAMATION);
|
||||||
//sanghoon end
|
//상훈 뒤
|
||||||
|
|
||||||
EnterWindowMode();
|
EnterWindowMode();
|
||||||
}
|
}
|
||||||
@@ -336,7 +336,7 @@ void _stdcall InitializeGameEngine()
|
|||||||
{
|
{
|
||||||
//Original
|
//Original
|
||||||
//page->GetEntry("videodriverindex",&Environment.FullScreenDevice);
|
//page->GetEntry("videodriverindex",&Environment.FullScreenDevice);
|
||||||
//sanghoon
|
//상훈
|
||||||
Environment.FullScreenDevice=0;
|
Environment.FullScreenDevice=0;
|
||||||
page->GetEntry("antialias",&Environment.AntiAlias);
|
page->GetEntry("antialias",&Environment.AntiAlias);
|
||||||
page->GetEntry("bitdepth",&Environment.bitDepth);
|
page->GetEntry("bitdepth",&Environment.bitDepth);
|
||||||
@@ -355,7 +355,7 @@ void _stdcall InitializeGameEngine()
|
|||||||
//Original
|
//Original
|
||||||
//page->GetEntry("HudDamageMode",&VehicleInterface::hudDamageMode);
|
//page->GetEntry("HudDamageMode",&VehicleInterface::hudDamageMode);
|
||||||
//page->GetEntry("HudTargetDamageMode",&VehicleInterface::hudTargetDamageMode);
|
//page->GetEntry("HudTargetDamageMode",&VehicleInterface::hudTargetDamageMode);
|
||||||
//sanghoon
|
//상훈
|
||||||
VehicleInterface::hudDamageMode=false;
|
VehicleInterface::hudDamageMode=false;
|
||||||
VehicleInterface::hudTargetDamageMode=false;
|
VehicleInterface::hudTargetDamageMode=false;
|
||||||
}
|
}
|
||||||
@@ -885,7 +885,7 @@ void __stdcall GetGameOSEnvironment(char* CommandLine)
|
|||||||
Environment.allowMultipleApps = false;
|
Environment.allowMultipleApps = false;
|
||||||
Environment.AllowJoinInProgress = true;
|
Environment.AllowJoinInProgress = true;
|
||||||
Environment.NetworkGame = true;
|
Environment.NetworkGame = true;
|
||||||
Environment.NetworkMaxPlayers = 31; // max 31 (fits in 5-bit bitstream)
|
Environment.NetworkMaxPlayers = 16;
|
||||||
Environment.NetworkGUID[0] = 0x95;
|
Environment.NetworkGUID[0] = 0x95;
|
||||||
Environment.NetworkGUID[1] = 0x78;
|
Environment.NetworkGUID[1] = 0x78;
|
||||||
Environment.NetworkGUID[2] = 0xFF;
|
Environment.NetworkGUID[2] = 0xFF;
|
||||||
@@ -1088,9 +1088,9 @@ DWORD __stdcall gos_EnableSetting( gosSetting Setting, DWORD Value );
|
|||||||
Environment.soundDisable = (strstr(all_lower, "-nosound") != NULL);
|
Environment.soundDisable = (strstr(all_lower, "-nosound") != NULL);
|
||||||
Environment.fullScreen = (strstr(all_lower, "-window") == NULL);
|
Environment.fullScreen = (strstr(all_lower, "-window") == NULL);
|
||||||
|
|
||||||
//sanghoon begin
|
//상훈짱.. begin
|
||||||
use_shgui=Environment.fullScreen?1:0;
|
use_shgui=Environment.fullScreen?1:0;
|
||||||
//sanghoon end
|
//상훈짱.. end
|
||||||
|
|
||||||
gNoAutoConfig= (strstr(all_lower, "-noautoconfig") != NULL);
|
gNoAutoConfig= (strstr(all_lower, "-noautoconfig") != NULL);
|
||||||
|
|
||||||
@@ -1440,7 +1440,7 @@ int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int n
|
|||||||
if (token && token[7])
|
if (token && token[7])
|
||||||
{
|
{
|
||||||
int n = atoi(&token[7]);
|
int n = atoi(&token[7]);
|
||||||
if ((0 <= n) && (n <= 4)) // 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual), 4 - split dual 640x480
|
if ((0 <= n) && (n <= 3)) // 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual)
|
||||||
g_nTypeOfMFDs = n;
|
g_nTypeOfMFDs = n;
|
||||||
}
|
}
|
||||||
token = strstr(all_lower, "-trio ");
|
token = strstr(all_lower, "-trio ");
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#include "recscore.h"
|
#include "recscore.h"
|
||||||
#endif // !defined(CTCLS_EXPORTS) && !defined(CTCL_LAUNCHER)
|
#endif // !defined(CTCLS_EXPORTS) && !defined(CTCL_LAUNCHER)
|
||||||
|
|
||||||
#define MAX_TESLAS 31
|
#define MAX_TESLAS 16
|
||||||
#define MAX_CAMERAS 4
|
#define MAX_CAMERAS 4
|
||||||
|
|
||||||
#define PORT_Launcher 1000
|
#define PORT_Launcher 1000
|
||||||
@@ -263,7 +263,7 @@ CInviteCOOP g_InviteCOOP;
|
|||||||
// Mech4 only
|
// Mech4 only
|
||||||
int g_nMech4Comm = 0;
|
int g_nMech4Comm = 0;
|
||||||
BOOL g_bIsServer = FALSE;
|
BOOL g_bIsServer = FALSE;
|
||||||
SPlayerInfo g_aPlayerInfos[35]; // 31 pilots + 1 CS + 3 spare
|
SPlayerInfo g_aPlayerInfos[20];
|
||||||
int g_nPlayerInfos;
|
int g_nPlayerInfos;
|
||||||
int g_nServer;
|
int g_nServer;
|
||||||
int g_nTeslas;
|
int g_nTeslas;
|
||||||
@@ -517,7 +517,7 @@ void CSOC_Server::OnSendFile()
|
|||||||
BYTE bCode;
|
BYTE bCode;
|
||||||
if (Disassemble("B", &bCode)) {
|
if (Disassemble("B", &bCode)) {
|
||||||
ASSERT((bCode == 0) || (bCode == 3));
|
ASSERT((bCode == 0) || (bCode == 3));
|
||||||
// Receiving from Game to console...
|
// 받아가시오 from Game to console...
|
||||||
SYSTEMTIME* pSysTime;
|
SYSTEMTIME* pSysTime;
|
||||||
WORD wSysTimeSize;
|
WORD wSysTimeSize;
|
||||||
GUID* pGUID;
|
GUID* pGUID;
|
||||||
@@ -533,7 +533,7 @@ void CSOC_Server::OnSendFile()
|
|||||||
pSF = g_pCTCLManager->m_SFM_Recv.Find(*pGUID, nType);
|
pSF = g_pCTCLManager->m_SFM_Recv.Find(*pGUID, nType);
|
||||||
if (pSF) {
|
if (pSF) {
|
||||||
if (bCode == 3) {
|
if (bCode == 3) {
|
||||||
// Did we receive confirmation the mission review server got the mission review?
|
// 미션리뷰 서버가 mission review 받았다는 것을 받았느냐?
|
||||||
pSF->m_bProcessed = true;
|
pSF->m_bProcessed = true;
|
||||||
g_pCTCLManager->m_SFM_Recv.Cut(pSF);
|
g_pCTCLManager->m_SFM_Recv.Cut(pSF);
|
||||||
g_pCTCLManager->m_SFM_Done.AddTail(pSF);
|
g_pCTCLManager->m_SFM_Done.AddTail(pSF);
|
||||||
@@ -910,7 +910,7 @@ void CSOC_Client::OnSendFile()
|
|||||||
BYTE bCode;
|
BYTE bCode;
|
||||||
if (Disassemble("B", &bCode)) {
|
if (Disassemble("B", &bCode)) {
|
||||||
ASSERT((bCode == 1) || (bCode == 2));
|
ASSERT((bCode == 1) || (bCode == 2));
|
||||||
// Received from console to Game...
|
// 받았오 from console to Game...
|
||||||
SYSTEMTIME* pSysTime;
|
SYSTEMTIME* pSysTime;
|
||||||
WORD wSysTimeSize;
|
WORD wSysTimeSize;
|
||||||
GUID* pGUID;
|
GUID* pGUID;
|
||||||
@@ -1437,21 +1437,21 @@ void CCTCLManager::Run()
|
|||||||
#endif // !defined(CTCL_LAUNCHER)
|
#endif // !defined(CTCL_LAUNCHER)
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
Code executed for both client and server.
|
클라이언트나 서버의 경우 실행되는 코드이다.
|
||||||
|
|
||||||
*Possible states:
|
*있을수 있는 상태들
|
||||||
Before server/client role is determined: waiting for commands
|
서버/클라이언트가 결정되기전.. 명령 대기상태
|
||||||
(Commands such as exit/start-server/start-client may arrive.)
|
(종료/서버시작/클라이언트 시작등의 명령이 올수 있다.)
|
||||||
|
|
||||||
Running as server, waiting for server mech configuration data
|
서버로 실행되어 서버 메크 설정에 대한 데이타를 기다리는 상태
|
||||||
(State after CreateSession has been called.)
|
(CreateSession가 실행된 상태이다.)
|
||||||
Running as server, waiting for Bot information
|
서버로 실행되어 Bot들에 대한 정보를 기다리는 상태
|
||||||
(Client joining happens automatically between client and server.)
|
(클라이언트의 참여는 클라이언트와 서버간에 자동으로 이루어진다.)
|
||||||
Running as server, waiting for Launch
|
서버로 실행되어 Launch를 기다리는 상태
|
||||||
|
|
||||||
==>Client has no waiting state as data is transferred immediately on startup.
|
==>클라이언트는 실행즉시 데이타들이 전달되므로 대기상태가 없다.
|
||||||
|
|
||||||
==>Define each state and implement the appropriate handling for each.
|
==>각각의 상태를 정의하고 각 상태에 맞는 처리를 해주면 된다.
|
||||||
switch(state){
|
switch(state){
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
@@ -1533,8 +1533,8 @@ void CCTCLManager::DoMech4Comm()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
//Send command to prepare for execution as server/client.
|
//서버/클라이언트로서 실행준비하도록 명령을 전달한다.
|
||||||
//Also transmit all parameters required to run the server.
|
//또한 서버를 실행하는데 필요한 모든 파라미터도 함께 전달한다.
|
||||||
for(i = 0; i < g_nPlayerInfos; i++) {
|
for(i = 0; i < g_nPlayerInfos; i++) {
|
||||||
SPlayerInfo& pi = g_aPlayerInfos[i];
|
SPlayerInfo& pi = g_aPlayerInfos[i];
|
||||||
if (!pi.m_bBot) {
|
if (!pi.m_bBot) {
|
||||||
@@ -1561,12 +1561,12 @@ void CCTCLManager::DoMech4Comm()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i == g_nPlayerInfos) {
|
if (i == g_nPlayerInfos) {
|
||||||
// Bundle and send all Bot information together.
|
// Bot들에 대한 정보를 모두 한데 묶어서 보낸다.
|
||||||
CPacket pak(&SVR.GetGameSOC());
|
CPacket pak(&SVR.GetGameSOC());
|
||||||
|
|
||||||
pak.Assemble("B", C_BOTS);
|
pak.Assemble("B", C_BOTS);
|
||||||
for(i = 0; i < g_nPlayerInfos; i++) {
|
for(i = 0; i < g_nPlayerInfos; i++) {
|
||||||
if (i != g_nServer) { // Originally bots only; now everyone except the server...
|
if (i != g_nServer) { // 원래 Bot만 지금은 서버를 제외한 전부...
|
||||||
SPlayerInfo& pi = g_aPlayerInfos[i];
|
SPlayerInfo& pi = g_aPlayerInfos[i];
|
||||||
pak.Assemble("BnsDWwsnn", pi.m_bBot, pi.m_nLevelOrTesla, pi.m_szName, pi.m_nMechIndex, pi.m_fileID, pi.m_recordID, pi.m_szMech, pi.m_nTeamOrSkin, pi.m_nDecal);
|
pak.Assemble("BnsDWwsnn", pi.m_bBot, pi.m_nLevelOrTesla, pi.m_szName, pi.m_nMechIndex, pi.m_fileID, pi.m_recordID, pi.m_szMech, pi.m_nTeamOrSkin, pi.m_nDecal);
|
||||||
}
|
}
|
||||||
@@ -1577,10 +1577,10 @@ void CCTCLManager::DoMech4Comm()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
// Once the game is successfully created, set Mech info for server and all clients...
|
// 게임이 성공적으로 만들어지면 서버와 클라이언트들의 Mech에 대한 정보들을 Set한다...
|
||||||
if (SOCGame.m_nGameReturn == _EGR_OkCreateSession) {
|
if (SOCGame.m_nGameReturn == _EGR_OkCreateSession) {
|
||||||
for(i = 0; i < g_nPlayerInfos; i++) {
|
for(i = 0; i < g_nPlayerInfos; i++) {
|
||||||
if (i != g_nServer) { // Server has already entered SetMech...
|
if (i != g_nServer) { // 서버는 이미 SetMech에 진입한 상태...
|
||||||
SPlayerInfo& pi = g_aPlayerInfos[i];
|
SPlayerInfo& pi = g_aPlayerInfos[i];
|
||||||
if (!pi.m_bBot) {
|
if (!pi.m_bBot) {
|
||||||
CTeslaInfo& ti = m_aTIs.GetAt(pi.m_nLevelOrTesla);
|
CTeslaInfo& ti = m_aTIs.GetAt(pi.m_nLevelOrTesla);
|
||||||
@@ -1593,8 +1593,8 @@ void CCTCLManager::DoMech4Comm()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
//Wait for all clients to join the server. <==This response comes from the server.
|
//모든 클라이언드들이 서버에 참여하기를 기다린다.<==이 응답은 서버로 부터 얻을 수 있다.
|
||||||
//Once all clients have joined, instruct the server to Launch the game.
|
//참여가 모두 끝났으면, 서버로 하여금 게임을 Launch시키도록 한다.
|
||||||
if (SOCGame.m_nGameReturn == _EGR_OkLaunchReady) {
|
if (SOCGame.m_nGameReturn == _EGR_OkLaunchReady) {
|
||||||
g_nMech4Comm = 9;
|
g_nMech4Comm = 9;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public:
|
|||||||
const char* m_pcsz;
|
const char* m_pcsz;
|
||||||
|
|
||||||
int m_nLauncherConnection; // 0: no connection, +1: connection, -1: connecting
|
int m_nLauncherConnection; // 0: no connection, +1: connection, -1: connecting
|
||||||
int m_nConnection2; // Connection to game or camera ship per m_bCameraShip, 0: no connection, +1: connected, -1: connecting
|
int m_nConnection2; // m_bCameraShip값에 따라 게임 혹은 카메라 쉽과의 접속을 의미, 0: no connection, +1: connection, -1: connecting
|
||||||
int m_nApplType;
|
int m_nApplType;
|
||||||
int m_nApplState;
|
int m_nApplState;
|
||||||
int m_nGameState;
|
int m_nGameState;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ int GetDayEnd(int nYear, int nMonth)
|
|||||||
|
|
||||||
long GetTotalSeconds(int nYear, int nMonth, int nDay)
|
long GetTotalSeconds(int nYear, int nMonth, int nDay)
|
||||||
{
|
{
|
||||||
// Seconds elapsed since 00:00:00 on the date nYear/nMonth/nDay...
|
// nYear, nMonth, nDay날의 0시 0분 0초를 0으로 한 초단위 수...
|
||||||
ASSERT(nYear >= 1970);
|
ASSERT(nYear >= 1970);
|
||||||
ASSERT((1 <= nMonth) && (nMonth <= 12));
|
ASSERT((1 <= nMonth) && (nMonth <= 12));
|
||||||
ASSERT(1 <= nDay);
|
ASSERT(1 <= nDay);
|
||||||
@@ -57,13 +57,13 @@ long GetTotalSeconds(int nYear, int nMonth, int nDay)
|
|||||||
if (IsLeapYear(nStart)) {
|
if (IsLeapYear(nStart)) {
|
||||||
nDays++;
|
nDays++;
|
||||||
}
|
}
|
||||||
lTotal += nDays * 24 * 60 * 60; // 24 hours * 60 min * 60 sec
|
lTotal += nDays * 24 * 60 * 60; // 24시간 60분 60초
|
||||||
}
|
}
|
||||||
for(nStart = 1; nStart < nMonth; nStart++) {
|
for(nStart = 1; nStart < nMonth; nStart++) {
|
||||||
int nDayEnd = GetDayEnd(nYear, nStart);
|
int nDayEnd = GetDayEnd(nYear, nStart);
|
||||||
lTotal += nDayEnd * 24 * 60 * 60; // 24 hours * 60 min * 60 sec
|
lTotal += nDayEnd * 24 * 60 * 60; // 24시간 60분 60초
|
||||||
}
|
}
|
||||||
lTotal += (nDay - 1) * 24 * 60 * 60; // 24 hours * 60 min * 60 sec
|
lTotal += (nDay - 1) * 24 * 60 * 60; // 24시간 60분 60초
|
||||||
|
|
||||||
return lTotal;
|
return lTotal;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class CTimeDate
|
|||||||
public:
|
public:
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
// Bit Fields declared first are at the low-bit end.
|
// Bit Field는 앞쪽에 지정된 것이 LowBit이다.
|
||||||
DWORD m_xDay: 5; // 2^0, 2^5-1
|
DWORD m_xDay: 5; // 2^0, 2^5-1
|
||||||
DWORD m_xMonth: 4; // 2^5, 2^4-1
|
DWORD m_xMonth: 4; // 2^5, 2^4-1
|
||||||
DWORD m_xYear: TIMEDATE_YEAR_BITS; // from 1900-2155 // 2^9, 2^8-1
|
DWORD m_xYear: TIMEDATE_YEAR_BITS; // from 1900-2155 // 2^9, 2^8-1
|
||||||
|
|||||||
@@ -1375,7 +1375,7 @@ void CSockAddr::SetTarget(const char* pcszAddr)
|
|||||||
{
|
{
|
||||||
if (pcszAddr) {
|
if (pcszAddr) {
|
||||||
sin_addr.s_addr = inet_addr(pcszAddr);
|
sin_addr.s_addr = inet_addr(pcszAddr);
|
||||||
if (sin_addr.s_addr == INADDR_ANY) { // 0.0.0.0, HOST/Network Addr irrelevant
|
if (sin_addr.s_addr == INADDR_ANY) { // 0.0.0.0이기 때문에 HOST/Network Addr무관
|
||||||
hostent* pHN = gethostbyname(pcszAddr);
|
hostent* pHN = gethostbyname(pcszAddr);
|
||||||
if (pHN) {
|
if (pHN) {
|
||||||
sin_addr.s_addr = *(u_long*)pHN->h_addr;
|
sin_addr.s_addr = *(u_long*)pHN->h_addr;
|
||||||
@@ -3667,7 +3667,7 @@ CSOCListen* CSOCManager::DoListen(int nPort, PFN_CreateSOCClient pfnCSC, DWORD d
|
|||||||
pSOCListen = new CSOCListen(nPort);
|
pSOCListen = new CSOCListen(nPort);
|
||||||
pSOCListen->SetCSCParam(pfnCSC, dwCSCParam1, dwCSCParam2);
|
pSOCListen->SetCSCParam(pfnCSC, dwCSCParam1, dwCSCParam2);
|
||||||
if (!DoListen(pSOCListen, nPort)) {
|
if (!DoListen(pSOCListen, nPort)) {
|
||||||
// Case of Listen on the same port twice?...
|
// 같은 포트를 2번 Listen 하는 경우?...
|
||||||
pSOCListen = NULL;
|
pSOCListen = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ extern char SERVERID[];
|
|||||||
#endif // !MAX_PACKET
|
#endif // !MAX_PACKET
|
||||||
#ifndef MAX_FTPBUF
|
#ifndef MAX_FTPBUF
|
||||||
#define MAX_FTPBUF 1024
|
#define MAX_FTPBUF 1024
|
||||||
// MAX_FTPBUF must be smaller than MAX_PACKET?
|
// MAX_FTPBUF는 MAX_PACKET보다 반드시 작아야 한다?
|
||||||
// 9+size==sizeof(bCmd) + sizeof(FTID) + sizeof(size) + size
|
// 9+size==sizeof(bCmd) + sizeof(FTID) + sizeof(size) + size
|
||||||
#endif // !MAX_FTPBUF
|
#endif // !MAX_FTPBUF
|
||||||
|
|
||||||
@@ -251,7 +251,7 @@ private:
|
|||||||
|
|
||||||
#define ESTRF_USER_START 100
|
#define ESTRF_USER_START 100
|
||||||
|
|
||||||
#define ESTRF_PASSWORDCHANGED 110 // Password changed while logged in
|
#define ESTRF_PASSWORDCHANGED 110 // 로그인하고 있는 동안에 패스워드가 바뀜
|
||||||
|
|
||||||
void Randomize();
|
void Randomize();
|
||||||
|
|
||||||
@@ -268,7 +268,7 @@ union UPacketValue
|
|||||||
|
|
||||||
class CDAPacket : public SOCBase_Class
|
class CDAPacket : public SOCBase_Class
|
||||||
{
|
{
|
||||||
// Variable parameters in the tail portion after processing the packet header...
|
// Packet의 앞 부분을 처리하고 난 뒷 부분의 가변 파라미터...
|
||||||
public:
|
public:
|
||||||
BYTE m_bCmd;
|
BYTE m_bCmd;
|
||||||
BYTE m_bReserved;
|
BYTE m_bReserved;
|
||||||
@@ -361,8 +361,8 @@ public:
|
|||||||
#define C_ROOM_MAKE 232
|
#define C_ROOM_MAKE 232
|
||||||
// s - name, s - password
|
// s - name, s - password
|
||||||
#define C_ROOM_JOIN 233
|
#define C_ROOM_JOIN 233
|
||||||
// d - number (leaving a Room = -1), s - password
|
// d - number(Room을 떠나는 것은 -1), s - password
|
||||||
#define S_ROOM_JOIN 233 // Result of C_ROOM_MAKE/C_ROOM_JOIN...
|
#define S_ROOM_JOIN 233 // C_ROOM_MAKE/C_ROOM_JOIN의 결과...
|
||||||
// b - code(CSCODE_OK or error code), d - number
|
// b - code(CSCODE_OK or error code), d - number
|
||||||
#define C_ROOM_UPDS 234 // CSCODE_... + @
|
#define C_ROOM_UPDS 234 // CSCODE_... + @
|
||||||
|
|
||||||
@@ -384,13 +384,13 @@ public:
|
|||||||
#define S_FTP 254 //... see ftp.txt
|
#define S_FTP 254 //... see ftp.txt
|
||||||
#define X_KEEPALIVE 255 // no parameters, should be ignored...
|
#define X_KEEPALIVE 255 // no parameters, should be ignored...
|
||||||
|
|
||||||
#define TX_SYSTEM 0 // System message...
|
#define TX_SYSTEM 0 // 시스템 메시지...
|
||||||
#define TX_NORMAL 1 // Regular chat text
|
#define TX_NORMAL 1 // 일반 채팅 텍스트
|
||||||
#define TX_WARNING 2 // Warning
|
#define TX_WARNING 2 // 경고
|
||||||
#define TX_ERROR 3 // Error
|
#define TX_ERROR 3 // 오류
|
||||||
#define TX_FATAL 4 // Fatal error
|
#define TX_FATAL 4 // 치명적인 오류
|
||||||
#define TX_INFO 5 // Information result (e.g. user info)...
|
#define TX_INFO 5 // 사용자 정보 등의 Information Result...
|
||||||
#define TX_SAY 6 // Whisper
|
#define TX_SAY 6 // 귓속말
|
||||||
#define TX_LOCAL 7 // local echo....
|
#define TX_LOCAL 7 // local echo....
|
||||||
#define TX_UNKNOWN 0xffff // unknown...
|
#define TX_UNKNOWN 0xffff // unknown...
|
||||||
|
|
||||||
@@ -493,7 +493,7 @@ CPacket
|
|||||||
protected:
|
protected:
|
||||||
CSOC* m_pSOC;
|
CSOC* m_pSOC;
|
||||||
private:
|
private:
|
||||||
// The block within must be contiguous...
|
// 이 안의 블럭은 반드시 연속해야 한다...
|
||||||
WORD m_wLen;
|
WORD m_wLen;
|
||||||
BYTE m_ba[MAX_PACKET];
|
BYTE m_ba[MAX_PACKET];
|
||||||
//
|
//
|
||||||
@@ -587,7 +587,7 @@ end of variable PACKET_MAP definitions...
|
|||||||
class CFileTransfer : public TDBLNK(CFileTransfer*)
|
class CFileTransfer : public TDBLNK(CFileTransfer*)
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Information received from server... - or information to relay to client...
|
// 서버로 부터 받은 정보... - 혹은 클라이언트에게 전해줄 정보...
|
||||||
BOOL m_bClientSite;
|
BOOL m_bClientSite;
|
||||||
DWORD m_dwFTID;
|
DWORD m_dwFTID;
|
||||||
DWORD m_dwGUARD;
|
DWORD m_dwGUARD;
|
||||||
@@ -680,18 +680,18 @@ protected:
|
|||||||
// time out to Drop...
|
// time out to Drop...
|
||||||
DWORD m_dwKARcvTimeOut;
|
DWORD m_dwKARcvTimeOut;
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
// Window handle typically used during Login process
|
// 보통 Login과정에 쓰이는 윈도우 핸들
|
||||||
HWND m_hWndOwner;
|
HWND m_hWndOwner;
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
// For auto NULL assignment of socket pointer typically used as a global variable
|
// 보통 글로벌 변수로 쓰이는 소켓포인터에 대한 자동 NULL Assign을 위하여
|
||||||
PSOC* m_ppSOC;
|
PSOC* m_ppSOC;
|
||||||
// ID used in user program to identify a socket
|
// 소켓을 구분하기 위하여 사용자 프로그램에서 쓰이는 아이디
|
||||||
// Mainly for servers: assigns a unique ID each time a client connects
|
// 주로 서버의 경우에는 클라이언트가 접속할 때마다 고유 아이디를 부여하여 사용
|
||||||
// Used to distinguish each connection when a client connects to multiple servers (Star topology)
|
// 하나의 Client가 다수의 서버에 접속할 때(주로 Star형) 각각의 접속을 구분할 때 사용
|
||||||
// When a client connects to only one server: used to check if client is connecting or already connected
|
// 클라이언트가 하나의 서버에만 접속하는 경우 클라이언트가 서버에 접속 중인지 혹은 접속했는지를 판단할 때
|
||||||
// Use CSOCManager::FindSOC(CSOC_SERVER_ID==default)->GetConnectionState().
|
// CSOCManager::FindSOC(CSOC_SERVER_ID==default)->GetConnectionState()를 사용.
|
||||||
// Must include limits.h.
|
// limits.h를 include해야함.
|
||||||
// Default values at CSOC creation: CSOCServer==CSOC_SERVER_ID(INT_MIN), CSOCClient==CSOC_CLIENT_ID(0), CSOCListen==CSOC_LISTEN_ID(-1)
|
// CSOC생성시의 기본값: CSOCServer == CSOC_SERVER_ID(=INT_MIN), CSOCClient == CSOC_CLIENT_ID(=0), CSOCListen == CSOC_LISTEN_ID(=-1)
|
||||||
union {
|
union {
|
||||||
int m_nID;
|
int m_nID;
|
||||||
UINT m_uID;
|
UINT m_uID;
|
||||||
@@ -725,8 +725,8 @@ protected:
|
|||||||
DWORD m_xGracefulRemote: 1;
|
DWORD m_xGracefulRemote: 1;
|
||||||
DWORD m_xAbortyLocal: 1;
|
DWORD m_xAbortyLocal: 1;
|
||||||
DWORD m_xAbortyRemote: 1;
|
DWORD m_xAbortyRemote: 1;
|
||||||
DWORD m_xLoginStarted: 1; // Must be set directly by the caller.
|
DWORD m_xLoginStarted: 1; // 사용자가 직접 값을 Setting해야 한다.
|
||||||
DWORD m_xLoginOK: 1; // Must be set directly by the caller.
|
DWORD m_xLoginOK: 1; // 사용자가 직접 값을 Setting해야 한다.
|
||||||
} m_DW;
|
} m_DW;
|
||||||
DWORD m_dwVarFlags;
|
DWORD m_dwVarFlags;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ inline BOOL AssertDialog(const char* pcszExpr, const char* pcszfile, int nLine)
|
|||||||
{
|
{
|
||||||
char szBuf[MAX_PATH * 2];
|
char szBuf[MAX_PATH * 2];
|
||||||
|
|
||||||
sprintf(szBuf, "ASSERT!!! in \"%s\" at line %d\n\nDo you want to debug?", pcszfile, nLine);
|
sprintf(szBuf, "\"%s\" 파일의 %d줄에서 ASSERT!!!\n\n디버깅을 하시겠습니까?", pcszfile, nLine);
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
return ::MessageBox(NULL, szBuf, pcszExpr, MB_YESNO) == IDYES;
|
return ::MessageBox(NULL, szBuf, pcszExpr, MB_YESNO) == IDYES;
|
||||||
|
|||||||
@@ -1077,7 +1077,7 @@ int CStrArray::GetTotalLength() const
|
|||||||
int nTotalLength;
|
int nTotalLength;
|
||||||
int i, nSize = GetSize();
|
int i, nSize = GetSize();
|
||||||
|
|
||||||
nTotalLength = nSize; // nSize null terminators '\0'
|
nTotalLength = nSize; // nSize개의 '\0'
|
||||||
for(i = 0; i < nSize; i++) {
|
for(i = 0; i < nSize; i++) {
|
||||||
nTotalLength += strlen(GetAt(i));
|
nTotalLength += strlen(GetAt(i));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3092,13 +3092,13 @@ bool FirstRunEula(const char *eula_filename,const char *warranty_filename)
|
|||||||
if (NULL == hMod)
|
if (NULL == hMod)
|
||||||
hMod = LoadLibrary("EBUEula.dll");
|
hMod = LoadLibrary("EBUEula.dll");
|
||||||
|
|
||||||
if (NULL == hMod) // can't attach to DLL
|
if (NULL == hMod) // can’t attach to DLL
|
||||||
{
|
{
|
||||||
STOP(("Cannot Load EBUEula.dll"));
|
STOP(("Cannot Load EBUEula.dll"));
|
||||||
}
|
}
|
||||||
pfnEBUEula = (EBUPROC) GetProcAddress(hMod, "EBUEula");
|
pfnEBUEula = (EBUPROC) GetProcAddress(hMod, "EBUEula");
|
||||||
|
|
||||||
if (NULL == pfnEBUEula) // can't find entry point
|
if (NULL == pfnEBUEula) // can’t find entry point
|
||||||
{
|
{
|
||||||
FreeLibrary(hMod);
|
FreeLibrary(hMod);
|
||||||
STOP(("Cannot Find Entry Point to EBUEula.dll"));
|
STOP(("Cannot Find Entry Point to EBUEula.dll"));
|
||||||
@@ -3107,9 +3107,9 @@ bool FirstRunEula(const char *eula_filename,const char *warranty_filename)
|
|||||||
|
|
||||||
//
|
//
|
||||||
//This call enables both EULA and warranty accepting/viewing/printing. If your
|
//This call enables both EULA and warranty accepting/viewing/printing. If your
|
||||||
//game doesn't ship with a WARRANTY file, specifiy NULL instead of szWarranty...
|
//game doesn’t ship with a WARRANTY file, specifiy NULL instead of szWarranty…
|
||||||
|
|
||||||
//The code below, for instance, works with both OEM and retail builds...
|
//The code below, for instance, works with both OEM and retail builds…
|
||||||
|
|
||||||
//
|
//
|
||||||
const char *pszWarrantyParam = 0xFFFFFFFF != GetFileAttributes(warranty_filename) ? warranty_filename : NULL;
|
const char *pszWarrantyParam = 0xFFFFFFFF != GetFileAttributes(warranty_filename) ? warranty_filename : NULL;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#include "recscore.h"
|
#include "recscore.h"
|
||||||
#endif // !defined(CTCLS_EXPORTS) && !defined(CTCL_LAUNCHER)
|
#endif // !defined(CTCLS_EXPORTS) && !defined(CTCL_LAUNCHER)
|
||||||
|
|
||||||
#define MAX_TESLAS 31
|
#define MAX_TESLAS 16
|
||||||
#define MAX_CAMERAS 4
|
#define MAX_CAMERAS 4
|
||||||
|
|
||||||
#define PORT_Launcher 1000
|
#define PORT_Launcher 1000
|
||||||
@@ -263,7 +263,7 @@ CInviteCOOP g_InviteCOOP;
|
|||||||
// Mech4 only
|
// Mech4 only
|
||||||
int g_nMech4Comm = 0;
|
int g_nMech4Comm = 0;
|
||||||
BOOL g_bIsServer = FALSE;
|
BOOL g_bIsServer = FALSE;
|
||||||
SPlayerInfo g_aPlayerInfos[35]; // 31 pilots + 1 CS + 3 spare
|
SPlayerInfo g_aPlayerInfos[20];
|
||||||
int g_nPlayerInfos;
|
int g_nPlayerInfos;
|
||||||
int g_nServer;
|
int g_nServer;
|
||||||
int g_nTeslas;
|
int g_nTeslas;
|
||||||
@@ -517,7 +517,7 @@ void CSOC_Server::OnSendFile()
|
|||||||
BYTE bCode;
|
BYTE bCode;
|
||||||
if (Disassemble("B", &bCode)) {
|
if (Disassemble("B", &bCode)) {
|
||||||
ASSERT((bCode == 0) || (bCode == 3));
|
ASSERT((bCode == 0) || (bCode == 3));
|
||||||
// Receiving from Game to console...
|
// 받아가시오 from Game to console...
|
||||||
SYSTEMTIME* pSysTime;
|
SYSTEMTIME* pSysTime;
|
||||||
WORD wSysTimeSize;
|
WORD wSysTimeSize;
|
||||||
GUID* pGUID;
|
GUID* pGUID;
|
||||||
@@ -533,7 +533,7 @@ void CSOC_Server::OnSendFile()
|
|||||||
pSF = g_pCTCLManager->m_SFM_Recv.Find(*pGUID, nType);
|
pSF = g_pCTCLManager->m_SFM_Recv.Find(*pGUID, nType);
|
||||||
if (pSF) {
|
if (pSF) {
|
||||||
if (bCode == 3) {
|
if (bCode == 3) {
|
||||||
// Did we receive confirmation the mission review server got the mission review?
|
// 미션리뷰 서버가 mission review 받았다는 것을 받았느냐?
|
||||||
pSF->m_bProcessed = true;
|
pSF->m_bProcessed = true;
|
||||||
g_pCTCLManager->m_SFM_Recv.Cut(pSF);
|
g_pCTCLManager->m_SFM_Recv.Cut(pSF);
|
||||||
g_pCTCLManager->m_SFM_Done.AddTail(pSF);
|
g_pCTCLManager->m_SFM_Done.AddTail(pSF);
|
||||||
@@ -910,7 +910,7 @@ void CSOC_Client::OnSendFile()
|
|||||||
BYTE bCode;
|
BYTE bCode;
|
||||||
if (Disassemble("B", &bCode)) {
|
if (Disassemble("B", &bCode)) {
|
||||||
ASSERT((bCode == 1) || (bCode == 2));
|
ASSERT((bCode == 1) || (bCode == 2));
|
||||||
// Received from console to Game...
|
// 받았오 from console to Game...
|
||||||
SYSTEMTIME* pSysTime;
|
SYSTEMTIME* pSysTime;
|
||||||
WORD wSysTimeSize;
|
WORD wSysTimeSize;
|
||||||
GUID* pGUID;
|
GUID* pGUID;
|
||||||
@@ -1438,21 +1438,21 @@ void CCTCLManager::Run()
|
|||||||
#endif // !defined(CTCL_LAUNCHER)
|
#endif // !defined(CTCL_LAUNCHER)
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
Code executed for both client and server.
|
클라이언트나 서버의 경우 실행되는 코드이다.
|
||||||
|
|
||||||
*Possible states:
|
*있을수 있는 상태들
|
||||||
Before server/client role is determined: waiting for commands
|
서버/클라이언트가 결정되기전.. 명령 대기상태
|
||||||
(Commands such as exit/start-server/start-client may arrive.)
|
(종료/서버시작/클라이언트 시작등의 명령이 올수 있다.)
|
||||||
|
|
||||||
Running as server, waiting for server mech configuration data
|
서버로 실행되어 서버 메크 설정에 대한 데이타를 기다리는 상태
|
||||||
(State after CreateSession has been called.)
|
(CreateSession가 실행된 상태이다.)
|
||||||
Running as server, waiting for Bot information
|
서버로 실행되어 Bot들에 대한 정보를 기다리는 상태
|
||||||
(Client joining happens automatically between client and server.)
|
(클라이언트의 참여는 클라이언트와 서버간에 자동으로 이루어진다.)
|
||||||
Running as server, waiting for Launch
|
서버로 실행되어 Launch를 기다리는 상태
|
||||||
|
|
||||||
==>Client has no waiting state as data is transferred immediately on startup.
|
==>클라이언트는 실행즉시 데이타들이 전달되므로 대기상태가 없다.
|
||||||
|
|
||||||
==>Define each state and implement the appropriate handling for each.
|
==>각각의 상태를 정의하고 각 상태에 맞는 처리를 해주면 된다.
|
||||||
switch(state){
|
switch(state){
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
@@ -1534,8 +1534,8 @@ void CCTCLManager::DoMech4Comm()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
//Send command to prepare for execution as server/client.
|
//서버/클라이언트로서 실행준비하도록 명령을 전달한다.
|
||||||
//Also transmit all parameters required to run the server.
|
//또한 서버를 실행하는데 필요한 모든 파라미터도 함께 전달한다.
|
||||||
for(i = 0; i < g_nPlayerInfos; i++) {
|
for(i = 0; i < g_nPlayerInfos; i++) {
|
||||||
SPlayerInfo& pi = g_aPlayerInfos[i];
|
SPlayerInfo& pi = g_aPlayerInfos[i];
|
||||||
if (!pi.m_bBot) {
|
if (!pi.m_bBot) {
|
||||||
@@ -1562,12 +1562,12 @@ void CCTCLManager::DoMech4Comm()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i == g_nPlayerInfos) {
|
if (i == g_nPlayerInfos) {
|
||||||
// Bundle and send all Bot information together.
|
// Bot들에 대한 정보를 모두 한데 묶어서 보낸다.
|
||||||
CPacket pak(&SVR.GetGameSOC());
|
CPacket pak(&SVR.GetGameSOC());
|
||||||
|
|
||||||
pak.Assemble("B", C_BOTS);
|
pak.Assemble("B", C_BOTS);
|
||||||
for(i = 0; i < g_nPlayerInfos; i++) {
|
for(i = 0; i < g_nPlayerInfos; i++) {
|
||||||
if (i != g_nServer) { // Originally bots only; now everyone except the server...
|
if (i != g_nServer) { // 원래 Bot만 지금은 서버를 제외한 전부...
|
||||||
SPlayerInfo& pi = g_aPlayerInfos[i];
|
SPlayerInfo& pi = g_aPlayerInfos[i];
|
||||||
pak.Assemble("BnsDWwsnn", pi.m_bBot, pi.m_nLevelOrTesla, pi.m_szName, pi.m_nMechIndex, pi.m_fileID, pi.m_recordID, pi.m_szMech, pi.m_nTeamOrSkin, pi.m_nDecal);
|
pak.Assemble("BnsDWwsnn", pi.m_bBot, pi.m_nLevelOrTesla, pi.m_szName, pi.m_nMechIndex, pi.m_fileID, pi.m_recordID, pi.m_szMech, pi.m_nTeamOrSkin, pi.m_nDecal);
|
||||||
}
|
}
|
||||||
@@ -1578,10 +1578,10 @@ void CCTCLManager::DoMech4Comm()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
// Once the game is successfully created, set Mech info for server and all clients...
|
// 게임이 성공적으로 만들어지면 서버와 클라이언트들의 Mech에 대한 정보들을 Set한다...
|
||||||
if (SOCGame.m_nGameReturn == _EGR_OkCreateSession) {
|
if (SOCGame.m_nGameReturn == _EGR_OkCreateSession) {
|
||||||
for(i = 0; i < g_nPlayerInfos; i++) {
|
for(i = 0; i < g_nPlayerInfos; i++) {
|
||||||
if (i != g_nServer) { // Server has already entered SetMech...
|
if (i != g_nServer) { // 서버는 이미 SetMech에 진입한 상태...
|
||||||
SPlayerInfo& pi = g_aPlayerInfos[i];
|
SPlayerInfo& pi = g_aPlayerInfos[i];
|
||||||
if (!pi.m_bBot) {
|
if (!pi.m_bBot) {
|
||||||
CTeslaInfo& ti = m_aTIs.GetAt(pi.m_nLevelOrTesla);
|
CTeslaInfo& ti = m_aTIs.GetAt(pi.m_nLevelOrTesla);
|
||||||
@@ -1594,8 +1594,8 @@ void CCTCLManager::DoMech4Comm()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
//Wait for all clients to join the server. <==This response comes from the server.
|
//모든 클라이언드들이 서버에 참여하기를 기다린다.<==이 응답은 서버로 부터 얻을 수 있다.
|
||||||
//Once all clients have joined, instruct the server to Launch the game.
|
//참여가 모두 끝났으면, 서버로 하여금 게임을 Launch시키도록 한다.
|
||||||
if (SOCGame.m_nGameReturn == _EGR_OkLaunchReady) {
|
if (SOCGame.m_nGameReturn == _EGR_OkLaunchReady) {
|
||||||
g_nMech4Comm = 9;
|
g_nMech4Comm = 9;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public:
|
|||||||
const char* m_pcsz;
|
const char* m_pcsz;
|
||||||
|
|
||||||
int m_nLauncherConnection; // 0: no connection, +1: connection, -1: connecting
|
int m_nLauncherConnection; // 0: no connection, +1: connection, -1: connecting
|
||||||
int m_nConnection2; // Connection to game or camera ship per m_bCameraShip, 0: no connection, +1: connected, -1: connecting
|
int m_nConnection2; // m_bCameraShip값에 따라 게임 혹은 카메라 쉽과의 접속을 의미, 0: no connection, +1: connection, -1: connecting
|
||||||
int m_nApplType;
|
int m_nApplType;
|
||||||
int m_nApplState;
|
int m_nApplState;
|
||||||
int m_nGameState;
|
int m_nGameState;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ int GetDayEnd(int nYear, int nMonth)
|
|||||||
|
|
||||||
long GetTotalSeconds(int nYear, int nMonth, int nDay)
|
long GetTotalSeconds(int nYear, int nMonth, int nDay)
|
||||||
{
|
{
|
||||||
// Seconds elapsed since 00:00:00 on the date nYear/nMonth/nDay...
|
// nYear, nMonth, nDay날의 0시 0분 0초를 0으로 한 초단위 수...
|
||||||
ASSERT(nYear >= 1970);
|
ASSERT(nYear >= 1970);
|
||||||
ASSERT((1 <= nMonth) && (nMonth <= 12));
|
ASSERT((1 <= nMonth) && (nMonth <= 12));
|
||||||
ASSERT(1 <= nDay);
|
ASSERT(1 <= nDay);
|
||||||
@@ -57,13 +57,13 @@ long GetTotalSeconds(int nYear, int nMonth, int nDay)
|
|||||||
if (IsLeapYear(nStart)) {
|
if (IsLeapYear(nStart)) {
|
||||||
nDays++;
|
nDays++;
|
||||||
}
|
}
|
||||||
lTotal += nDays * 24 * 60 * 60; // 24 hours * 60 min * 60 sec
|
lTotal += nDays * 24 * 60 * 60; // 24시간 60분 60초
|
||||||
}
|
}
|
||||||
for(nStart = 1; nStart < nMonth; nStart++) {
|
for(nStart = 1; nStart < nMonth; nStart++) {
|
||||||
int nDayEnd = GetDayEnd(nYear, nStart);
|
int nDayEnd = GetDayEnd(nYear, nStart);
|
||||||
lTotal += nDayEnd * 24 * 60 * 60; // 24 hours * 60 min * 60 sec
|
lTotal += nDayEnd * 24 * 60 * 60; // 24시간 60분 60초
|
||||||
}
|
}
|
||||||
lTotal += (nDay - 1) * 24 * 60 * 60; // 24 hours * 60 min * 60 sec
|
lTotal += (nDay - 1) * 24 * 60 * 60; // 24시간 60분 60초
|
||||||
|
|
||||||
return lTotal;
|
return lTotal;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class CTimeDate
|
|||||||
public:
|
public:
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
// Bit Fields declared first are at the low-bit end.
|
// Bit Field는 앞쪽에 지정된 것이 LowBit이다.
|
||||||
DWORD m_xDay: 5; // 2^0, 2^5-1
|
DWORD m_xDay: 5; // 2^0, 2^5-1
|
||||||
DWORD m_xMonth: 4; // 2^5, 2^4-1
|
DWORD m_xMonth: 4; // 2^5, 2^4-1
|
||||||
DWORD m_xYear: TIMEDATE_YEAR_BITS; // from 1900-2155 // 2^9, 2^8-1
|
DWORD m_xYear: TIMEDATE_YEAR_BITS; // from 1900-2155 // 2^9, 2^8-1
|
||||||
|
|||||||
@@ -1375,7 +1375,7 @@ void CSockAddr::SetTarget(const char* pcszAddr)
|
|||||||
{
|
{
|
||||||
if (pcszAddr) {
|
if (pcszAddr) {
|
||||||
sin_addr.s_addr = inet_addr(pcszAddr);
|
sin_addr.s_addr = inet_addr(pcszAddr);
|
||||||
if (sin_addr.s_addr == INADDR_ANY) { // 0.0.0.0, HOST/Network Addr irrelevant
|
if (sin_addr.s_addr == INADDR_ANY) { // 0.0.0.0이기 때문에 HOST/Network Addr무관
|
||||||
hostent* pHN = gethostbyname(pcszAddr);
|
hostent* pHN = gethostbyname(pcszAddr);
|
||||||
if (pHN) {
|
if (pHN) {
|
||||||
sin_addr.s_addr = *(u_long*)pHN->h_addr;
|
sin_addr.s_addr = *(u_long*)pHN->h_addr;
|
||||||
@@ -3667,7 +3667,7 @@ CSOCListen* CSOCManager::DoListen(int nPort, PFN_CreateSOCClient pfnCSC, DWORD d
|
|||||||
pSOCListen = new CSOCListen(nPort);
|
pSOCListen = new CSOCListen(nPort);
|
||||||
pSOCListen->SetCSCParam(pfnCSC, dwCSCParam1, dwCSCParam2);
|
pSOCListen->SetCSCParam(pfnCSC, dwCSCParam1, dwCSCParam2);
|
||||||
if (!DoListen(pSOCListen, nPort)) {
|
if (!DoListen(pSOCListen, nPort)) {
|
||||||
// Case of Listen on the same port twice?...
|
// 같은 포트를 2번 Listen 하는 경우?...
|
||||||
pSOCListen = NULL;
|
pSOCListen = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ extern char SERVERID[];
|
|||||||
#endif // !MAX_PACKET
|
#endif // !MAX_PACKET
|
||||||
#ifndef MAX_FTPBUF
|
#ifndef MAX_FTPBUF
|
||||||
#define MAX_FTPBUF 1024
|
#define MAX_FTPBUF 1024
|
||||||
// MAX_FTPBUF must be smaller than MAX_PACKET?
|
// MAX_FTPBUF는 MAX_PACKET보다 반드시 작아야 한다?
|
||||||
// 9+size==sizeof(bCmd) + sizeof(FTID) + sizeof(size) + size
|
// 9+size==sizeof(bCmd) + sizeof(FTID) + sizeof(size) + size
|
||||||
#endif // !MAX_FTPBUF
|
#endif // !MAX_FTPBUF
|
||||||
|
|
||||||
@@ -251,7 +251,7 @@ private:
|
|||||||
|
|
||||||
#define ESTRF_USER_START 100
|
#define ESTRF_USER_START 100
|
||||||
|
|
||||||
#define ESTRF_PASSWORDCHANGED 110 // Password changed while logged in
|
#define ESTRF_PASSWORDCHANGED 110 // 로그인하고 있는 동안에 패스워드가 바뀜
|
||||||
|
|
||||||
void Randomize();
|
void Randomize();
|
||||||
|
|
||||||
@@ -268,7 +268,7 @@ union UPacketValue
|
|||||||
|
|
||||||
class CDAPacket : public SOCBase_Class
|
class CDAPacket : public SOCBase_Class
|
||||||
{
|
{
|
||||||
// Variable parameters in the tail portion after processing the packet header...
|
// Packet의 앞 부분을 처리하고 난 뒷 부분의 가변 파라미터...
|
||||||
public:
|
public:
|
||||||
BYTE m_bCmd;
|
BYTE m_bCmd;
|
||||||
BYTE m_bReserved;
|
BYTE m_bReserved;
|
||||||
@@ -361,8 +361,8 @@ public:
|
|||||||
#define C_ROOM_MAKE 232
|
#define C_ROOM_MAKE 232
|
||||||
// s - name, s - password
|
// s - name, s - password
|
||||||
#define C_ROOM_JOIN 233
|
#define C_ROOM_JOIN 233
|
||||||
// d - number (leaving a Room = -1), s - password
|
// d - number(Room을 떠나는 것은 -1), s - password
|
||||||
#define S_ROOM_JOIN 233 // Result of C_ROOM_MAKE/C_ROOM_JOIN...
|
#define S_ROOM_JOIN 233 // C_ROOM_MAKE/C_ROOM_JOIN의 결과...
|
||||||
// b - code(CSCODE_OK or error code), d - number
|
// b - code(CSCODE_OK or error code), d - number
|
||||||
#define C_ROOM_UPDS 234 // CSCODE_... + @
|
#define C_ROOM_UPDS 234 // CSCODE_... + @
|
||||||
|
|
||||||
@@ -384,13 +384,13 @@ public:
|
|||||||
#define S_FTP 254 //... see ftp.txt
|
#define S_FTP 254 //... see ftp.txt
|
||||||
#define X_KEEPALIVE 255 // no parameters, should be ignored...
|
#define X_KEEPALIVE 255 // no parameters, should be ignored...
|
||||||
|
|
||||||
#define TX_SYSTEM 0 // System message...
|
#define TX_SYSTEM 0 // 시스템 메시지...
|
||||||
#define TX_NORMAL 1 // Regular chat text
|
#define TX_NORMAL 1 // 일반 채팅 텍스트
|
||||||
#define TX_WARNING 2 // Warning
|
#define TX_WARNING 2 // 경고
|
||||||
#define TX_ERROR 3 // Error
|
#define TX_ERROR 3 // 오류
|
||||||
#define TX_FATAL 4 // Fatal error
|
#define TX_FATAL 4 // 치명적인 오류
|
||||||
#define TX_INFO 5 // Information result (e.g. user info)...
|
#define TX_INFO 5 // 사용자 정보 등의 Information Result...
|
||||||
#define TX_SAY 6 // Whisper
|
#define TX_SAY 6 // 귓속말
|
||||||
#define TX_LOCAL 7 // local echo....
|
#define TX_LOCAL 7 // local echo....
|
||||||
#define TX_UNKNOWN 0xffff // unknown...
|
#define TX_UNKNOWN 0xffff // unknown...
|
||||||
|
|
||||||
@@ -493,7 +493,7 @@ CPacket
|
|||||||
protected:
|
protected:
|
||||||
CSOC* m_pSOC;
|
CSOC* m_pSOC;
|
||||||
private:
|
private:
|
||||||
// The block within must be contiguous...
|
// 이 안의 블럭은 반드시 연속해야 한다...
|
||||||
WORD m_wLen;
|
WORD m_wLen;
|
||||||
BYTE m_ba[MAX_PACKET];
|
BYTE m_ba[MAX_PACKET];
|
||||||
//
|
//
|
||||||
@@ -587,7 +587,7 @@ end of variable PACKET_MAP definitions...
|
|||||||
class CFileTransfer : public TDBLNK(CFileTransfer*)
|
class CFileTransfer : public TDBLNK(CFileTransfer*)
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Information received from server... - or information to relay to client...
|
// 서버로 부터 받은 정보... - 혹은 클라이언트에게 전해줄 정보...
|
||||||
BOOL m_bClientSite;
|
BOOL m_bClientSite;
|
||||||
DWORD m_dwFTID;
|
DWORD m_dwFTID;
|
||||||
DWORD m_dwGUARD;
|
DWORD m_dwGUARD;
|
||||||
@@ -680,18 +680,18 @@ protected:
|
|||||||
// time out to Drop...
|
// time out to Drop...
|
||||||
DWORD m_dwKARcvTimeOut;
|
DWORD m_dwKARcvTimeOut;
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
// Window handle typically used during Login process
|
// 보통 Login과정에 쓰이는 윈도우 핸들
|
||||||
HWND m_hWndOwner;
|
HWND m_hWndOwner;
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
// For auto NULL assignment of socket pointer typically used as a global variable
|
// 보통 글로벌 변수로 쓰이는 소켓포인터에 대한 자동 NULL Assign을 위하여
|
||||||
PSOC* m_ppSOC;
|
PSOC* m_ppSOC;
|
||||||
// ID used in user program to identify a socket
|
// 소켓을 구분하기 위하여 사용자 프로그램에서 쓰이는 아이디
|
||||||
// Mainly for servers: assigns a unique ID each time a client connects
|
// 주로 서버의 경우에는 클라이언트가 접속할 때마다 고유 아이디를 부여하여 사용
|
||||||
// Used to distinguish each connection when a client connects to multiple servers (Star topology)
|
// 하나의 Client가 다수의 서버에 접속할 때(주로 Star형) 각각의 접속을 구분할 때 사용
|
||||||
// When a client connects to only one server: used to check if client is connecting or already connected
|
// 클라이언트가 하나의 서버에만 접속하는 경우 클라이언트가 서버에 접속 중인지 혹은 접속했는지를 판단할 때
|
||||||
// Use CSOCManager::FindSOC(CSOC_SERVER_ID==default)->GetConnectionState().
|
// CSOCManager::FindSOC(CSOC_SERVER_ID==default)->GetConnectionState()를 사용.
|
||||||
// Must include limits.h.
|
// limits.h를 include해야함.
|
||||||
// Default values at CSOC creation: CSOCServer==CSOC_SERVER_ID(INT_MIN), CSOCClient==CSOC_CLIENT_ID(0), CSOCListen==CSOC_LISTEN_ID(-1)
|
// CSOC생성시의 기본값: CSOCServer == CSOC_SERVER_ID(=INT_MIN), CSOCClient == CSOC_CLIENT_ID(=0), CSOCListen == CSOC_LISTEN_ID(=-1)
|
||||||
union {
|
union {
|
||||||
int m_nID;
|
int m_nID;
|
||||||
UINT m_uID;
|
UINT m_uID;
|
||||||
@@ -725,8 +725,8 @@ protected:
|
|||||||
DWORD m_xGracefulRemote: 1;
|
DWORD m_xGracefulRemote: 1;
|
||||||
DWORD m_xAbortyLocal: 1;
|
DWORD m_xAbortyLocal: 1;
|
||||||
DWORD m_xAbortyRemote: 1;
|
DWORD m_xAbortyRemote: 1;
|
||||||
DWORD m_xLoginStarted: 1; // Must be set directly by the caller.
|
DWORD m_xLoginStarted: 1; // 사용자가 직접 값을 Setting해야 한다.
|
||||||
DWORD m_xLoginOK: 1; // Must be set directly by the caller.
|
DWORD m_xLoginOK: 1; // 사용자가 직접 값을 Setting해야 한다.
|
||||||
} m_DW;
|
} m_DW;
|
||||||
DWORD m_dwVarFlags;
|
DWORD m_dwVarFlags;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ inline BOOL AssertDialog(const char* pcszExpr, const char* pcszfile, int nLine)
|
|||||||
{
|
{
|
||||||
char szBuf[MAX_PATH * 2];
|
char szBuf[MAX_PATH * 2];
|
||||||
|
|
||||||
sprintf(szBuf, "ASSERT!!! in \"%s\" at line %d\n\nDo you want to debug?", pcszfile, nLine);
|
sprintf(szBuf, "\"%s\" 파일의 %d줄에서 ASSERT!!!\n\n디버깅을 하시겠습니까?", pcszfile, nLine);
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
return ::MessageBox(NULL, szBuf, pcszExpr, MB_YESNO) == IDYES;
|
return ::MessageBox(NULL, szBuf, pcszExpr, MB_YESNO) == IDYES;
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
#include "mw4dummy.h"
|
#include "mw4dummy.h"
|
||||||
#include "recscore.h"
|
#include "recscore.h"
|
||||||
#include "dbexport.h"
|
|
||||||
typedef unsigned long UINT4;
|
typedef unsigned long UINT4;
|
||||||
typedef unsigned char* POINTER;
|
typedef unsigned char* POINTER;
|
||||||
#include "logreport.h"
|
#include "logreport.h"
|
||||||
@@ -24,7 +23,6 @@ static char THIS_FILE[] = __FILE__;
|
|||||||
|
|
||||||
#include "mw4dummy.cpp"
|
#include "mw4dummy.cpp"
|
||||||
#include "recscore.cpp"
|
#include "recscore.cpp"
|
||||||
#include "dbexport.cpp"
|
|
||||||
#include "logreport.cpp"
|
#include "logreport.cpp"
|
||||||
|
|
||||||
#define IDT_TIMER 1000
|
#define IDT_TIMER 1000
|
||||||
@@ -39,12 +37,6 @@ BEGIN_MESSAGE_MAP(CChildView,CWnd )
|
|||||||
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
|
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
|
||||||
ON_COMMAND(ID_FILE_LOGREPORT, OnFileLogReport)
|
ON_COMMAND(ID_FILE_LOGREPORT, OnFileLogReport)
|
||||||
ON_COMMAND(ID_FILE_LOG2DATES, OnFileLog2Dates)
|
ON_COMMAND(ID_FILE_LOG2DATES, OnFileLog2Dates)
|
||||||
ON_COMMAND(ID_FILE_DBSETTINGS, OnFileDbSettings)
|
|
||||||
ON_COMMAND(ID_FILE_BANNERSETTING, OnFileBannerSetting)
|
|
||||||
END_MESSAGE_MAP()
|
|
||||||
|
|
||||||
BEGIN_MESSAGE_MAP(CDlgDBSettings, CDialog)
|
|
||||||
ON_BN_CLICKED(IDC_DB_TEST, OnTestConnection)
|
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
BEGIN_MESSAGE_MAP(CDlgGet2Dates, CDialog)
|
BEGIN_MESSAGE_MAP(CDlgGet2Dates, CDialog)
|
||||||
@@ -308,8 +300,6 @@ int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|||||||
if (CWnd ::OnCreate(lpCreateStruct) == -1)
|
if (CWnd ::OnCreate(lpCreateStruct) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
DB_LoadConfig();
|
|
||||||
|
|
||||||
m_uTimer = SetTimer(IDT_TIMER, 1 * 1000, NULL);
|
m_uTimer = SetTimer(IDT_TIMER, 1 * 1000, NULL);
|
||||||
if (!m_uTimer)
|
if (!m_uTimer)
|
||||||
return -1;
|
return -1;
|
||||||
@@ -353,121 +343,6 @@ void CChildView::OnTimer(UINT nIDEvent)
|
|||||||
CWnd ::OnTimer(nIDEvent);
|
CWnd ::OnTimer(nIDEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CChildView::OnFileBannerSetting()
|
|
||||||
{
|
|
||||||
CDlgBannerSetting dlg(this);
|
|
||||||
dlg.DoModal();
|
|
||||||
}
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// CDlgBannerSetting
|
|
||||||
|
|
||||||
CDlgBannerSetting::CDlgBannerSetting(CWnd* pParent)
|
|
||||||
: CDialog(CDlgBannerSetting::IDD, pParent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
BEGIN_MESSAGE_MAP(CDlgBannerSetting, CDialog)
|
|
||||||
END_MESSAGE_MAP()
|
|
||||||
|
|
||||||
void CDlgBannerSetting::DoDataExchange(CDataExchange* pDX)
|
|
||||||
{
|
|
||||||
CDialog::DoDataExchange(pDX);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL CDlgBannerSetting::OnInitDialog()
|
|
||||||
{
|
|
||||||
CDialog::OnInitDialog();
|
|
||||||
SetDlgItemText(IDC_BANNER_TEXT, g_szPrintBanner);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CDlgBannerSetting::OnOK()
|
|
||||||
{
|
|
||||||
GetDlgItemText(IDC_BANNER_TEXT, g_szPrintBanner, sizeof(g_szPrintBanner));
|
|
||||||
|
|
||||||
// Persist to options.ini so it survives a restart.
|
|
||||||
char szINI[MAX_PATH];
|
|
||||||
sprintf(szINI, "%s\\options.ini", AssetsDirectory1);
|
|
||||||
WritePrivateProfileString("battle tech print", "BannerText", g_szPrintBanner, szINI);
|
|
||||||
|
|
||||||
CDialog::OnOK();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CChildView::OnFileDbSettings()
|
|
||||||
{
|
|
||||||
CDlgDBSettings dlg(this);
|
|
||||||
dlg.DoModal();
|
|
||||||
}
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// CDlgDBSettings
|
|
||||||
|
|
||||||
CDlgDBSettings::CDlgDBSettings(CWnd* pParent)
|
|
||||||
: CDialog(CDlgDBSettings::IDD, pParent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void CDlgDBSettings::DoDataExchange(CDataExchange* pDX)
|
|
||||||
{
|
|
||||||
CDialog::DoDataExchange(pDX);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL CDlgDBSettings::OnInitDialog()
|
|
||||||
{
|
|
||||||
CDialog::OnInitDialog();
|
|
||||||
|
|
||||||
CheckDlgButton(IDC_DB_ENABLED, g_dbConfig.bEnabled ? BST_CHECKED : BST_UNCHECKED);
|
|
||||||
CheckDlgButton(IDC_DB_EXPORTEVENTS, g_dbConfig.bExportEvents ? BST_CHECKED : BST_UNCHECKED);
|
|
||||||
|
|
||||||
SetDlgItemText(IDC_DB_HOST, g_dbConfig.szHost);
|
|
||||||
SetDlgItemInt (IDC_DB_PORT, g_dbConfig.nPort, FALSE);
|
|
||||||
SetDlgItemText(IDC_DB_DATABASE, g_dbConfig.szDatabase);
|
|
||||||
SetDlgItemText(IDC_DB_USERNAME, g_dbConfig.szUsername);
|
|
||||||
SetDlgItemText(IDC_DB_PASSWORD, g_dbConfig.szPassword);
|
|
||||||
|
|
||||||
SetDlgItemText(IDC_DB_STATUS, "");
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CDlgDBSettings::OnOK()
|
|
||||||
{
|
|
||||||
g_dbConfig.bEnabled = IsDlgButtonChecked(IDC_DB_ENABLED) == BST_CHECKED;
|
|
||||||
g_dbConfig.bExportEvents = IsDlgButtonChecked(IDC_DB_EXPORTEVENTS) == BST_CHECKED;
|
|
||||||
|
|
||||||
GetDlgItemText(IDC_DB_HOST, g_dbConfig.szHost, sizeof(g_dbConfig.szHost));
|
|
||||||
g_dbConfig.nPort = (int)GetDlgItemInt(IDC_DB_PORT, NULL, FALSE);
|
|
||||||
GetDlgItemText(IDC_DB_DATABASE, g_dbConfig.szDatabase, sizeof(g_dbConfig.szDatabase));
|
|
||||||
GetDlgItemText(IDC_DB_USERNAME, g_dbConfig.szUsername, sizeof(g_dbConfig.szUsername));
|
|
||||||
GetDlgItemText(IDC_DB_PASSWORD, g_dbConfig.szPassword, sizeof(g_dbConfig.szPassword));
|
|
||||||
|
|
||||||
DB_SaveConfig();
|
|
||||||
CDialog::OnOK();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CDlgDBSettings::OnTestConnection()
|
|
||||||
{
|
|
||||||
// Read fields into a temporary config so we test what's in the UI,
|
|
||||||
// not necessarily what was last saved.
|
|
||||||
SDBConfig saved = g_dbConfig;
|
|
||||||
|
|
||||||
GetDlgItemText(IDC_DB_HOST, g_dbConfig.szHost, sizeof(g_dbConfig.szHost));
|
|
||||||
g_dbConfig.nPort = (int)GetDlgItemInt(IDC_DB_PORT, NULL, FALSE);
|
|
||||||
GetDlgItemText(IDC_DB_DATABASE, g_dbConfig.szDatabase, sizeof(g_dbConfig.szDatabase));
|
|
||||||
GetDlgItemText(IDC_DB_USERNAME, g_dbConfig.szUsername, sizeof(g_dbConfig.szUsername));
|
|
||||||
GetDlgItemText(IDC_DB_PASSWORD, g_dbConfig.szPassword, sizeof(g_dbConfig.szPassword));
|
|
||||||
|
|
||||||
SetDlgItemText(IDC_DB_STATUS, "Testing...");
|
|
||||||
UpdateWindow();
|
|
||||||
|
|
||||||
char szError[512] = "";
|
|
||||||
bool bOK = DB_TestConnection(szError, sizeof(szError));
|
|
||||||
SetDlgItemText(IDC_DB_STATUS, bOK ? "OK - Connected successfully." : szError);
|
|
||||||
|
|
||||||
g_dbConfig = saved; // restore; OnOK() will save the final values
|
|
||||||
}
|
|
||||||
|
|
||||||
void CChildView::OnFileOpen()
|
void CChildView::OnFileOpen()
|
||||||
{
|
{
|
||||||
// TODO: Add your command handler code here
|
// TODO: Add your command handler code here
|
||||||
|
|||||||
@@ -9,41 +9,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#endif // _MSC_VER > 1000
|
#endif // _MSC_VER > 1000
|
||||||
|
|
||||||
class CDlgBannerSetting : public CDialog
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CDlgBannerSetting(CWnd* pParent = NULL);
|
|
||||||
enum { IDD = IDD_BANNER_SETTING };
|
|
||||||
protected:
|
|
||||||
virtual void DoDataExchange(CDataExchange* pDX);
|
|
||||||
virtual BOOL OnInitDialog();
|
|
||||||
virtual void OnOK();
|
|
||||||
DECLARE_MESSAGE_MAP()
|
|
||||||
};
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// CChildView window
|
// CChildView window
|
||||||
|
|
||||||
class MW4PRINT_COPYDATASTRUCT;
|
class MW4PRINT_COPYDATASTRUCT;
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// CDlgDBSettings dialog
|
|
||||||
|
|
||||||
class CDlgDBSettings : public CDialog
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CDlgDBSettings(CWnd* pParent = NULL);
|
|
||||||
|
|
||||||
enum { IDD = IDD_DB_SETTINGS };
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual void DoDataExchange(CDataExchange* pDX);
|
|
||||||
virtual BOOL OnInitDialog();
|
|
||||||
virtual void OnOK();
|
|
||||||
afx_msg void OnTestConnection();
|
|
||||||
DECLARE_MESSAGE_MAP()
|
|
||||||
};
|
|
||||||
|
|
||||||
class CMyPrintInfo : public TDBLNK(CMyPrintInfo*)
|
class CMyPrintInfo : public TDBLNK(CMyPrintInfo*)
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -161,8 +131,6 @@ protected:
|
|||||||
afx_msg void OnFileOpen();
|
afx_msg void OnFileOpen();
|
||||||
afx_msg void OnFileLogReport();
|
afx_msg void OnFileLogReport();
|
||||||
afx_msg void OnFileLog2Dates();
|
afx_msg void OnFileLog2Dates();
|
||||||
afx_msg void OnFileDbSettings();
|
|
||||||
afx_msg void OnFileBannerSetting();
|
|
||||||
DECLARE_MESSAGE_MAP()
|
DECLARE_MESSAGE_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1077,7 +1077,7 @@ int CStrArray::GetTotalLength() const
|
|||||||
int nTotalLength;
|
int nTotalLength;
|
||||||
int i, nSize = GetSize();
|
int i, nSize = GetSize();
|
||||||
|
|
||||||
nTotalLength = nSize; // nSize null terminators '\0'
|
nTotalLength = nSize; // nSize개의 '\0'
|
||||||
for(i = 0; i < nSize; i++) {
|
for(i = 0; i < nSize; i++) {
|
||||||
nTotalLength += strlen(GetAt(i));
|
nTotalLength += strlen(GetAt(i));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ void CSpcFileDialog::SetCustomFilter(const char* pcszName/* = NULL*/, const char
|
|||||||
m_ofn.lpstrCustomFilter = p;
|
m_ofn.lpstrCustomFilter = p;
|
||||||
|
|
||||||
if (!pcszName) {
|
if (!pcszName) {
|
||||||
pcszName = "User-defined file";
|
pcszName = "사용자 정의 파일";
|
||||||
}
|
}
|
||||||
strcpy(p, pcszName);
|
strcpy(p, pcszName);
|
||||||
p = &p[strlen(pcszName)];
|
p = &p[strlen(pcszName)];
|
||||||
@@ -111,7 +111,7 @@ BOOL CSpcFileDialog::DoMessage(HWND hParent, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||||||
switch(uMsg) {
|
switch(uMsg) {
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
if (m_dwStyle) {
|
if (m_dwStyle) {
|
||||||
//0x480 // File Name Edit
|
//0x480 // 파일 이름 Edit
|
||||||
HWND hReadOnly = ::GetDlgItem(hParent, 0x0410); // Read Only
|
HWND hReadOnly = ::GetDlgItem(hParent, 0x0410); // Read Only
|
||||||
if (hReadOnly) {
|
if (hReadOnly) {
|
||||||
if (m_dwStyle == (DWORD)(-1)) {
|
if (m_dwStyle == (DWORD)(-1)) {
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ public:
|
|||||||
CSpcFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL);
|
CSpcFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL);
|
||||||
void SetTitle(const char* pcszTitle);
|
void SetTitle(const char* pcszTitle);
|
||||||
void SetWorkingDir(const char* pcszWorkingDir);
|
void SetWorkingDir(const char* pcszWorkingDir);
|
||||||
void SetFilterIndex(int nFilterIndex); // 1-based index, 0 = user-defined filter
|
void SetFilterIndex(int nFilterIndex); // 1 기준한 값, 0은 사용자 필터
|
||||||
int GetFilterIndex() const; // 1-based index, 0 = user-defined filter
|
int GetFilterIndex() const; // 1 기준한 값, 0은 사용자 필터
|
||||||
void SetCustomFilter(const char* pcszName = NULL, const char* pcszExt = NULL);
|
void SetCustomFilter(const char* pcszName = NULL, const char* pcszExt = NULL);
|
||||||
void EnableHook(const char* pcszWindowText, DWORD dwStyle = (DWORD)(-1));
|
void EnableHook(const char* pcszWindowText, DWORD dwStyle = (DWORD)(-1));
|
||||||
|
|
||||||
|
|||||||
@@ -1,135 +0,0 @@
|
|||||||
-- mw4print MySQL database schema
|
|
||||||
-- Tables are created automatically by mw4print on first export.
|
|
||||||
-- This file documents the structure for reference.
|
|
||||||
--
|
|
||||||
-- Prerequisites: create the database first, then configure mw4print.ini:
|
|
||||||
--
|
|
||||||
-- [MySQLExport]
|
|
||||||
-- Enabled=1
|
|
||||||
-- Host=192.168.1.100
|
|
||||||
-- Port=3306
|
|
||||||
-- Database=firestorm_stats
|
|
||||||
-- Username=mw4
|
|
||||||
-- Password=yourpassword
|
|
||||||
-- ExportEvents=0
|
|
||||||
--
|
|
||||||
-- Run this script manually if you want to pre-create the tables,
|
|
||||||
-- or just let mw4print create them on first connect.
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `match` (
|
|
||||||
`match_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
||||||
`match_time` DATETIME NOT NULL,
|
|
||||||
`server_name` VARCHAR(256) NOT NULL DEFAULT '',
|
|
||||||
`server_ip` VARCHAR(64) NOT NULL DEFAULT '',
|
|
||||||
`map_name` VARCHAR(128) NOT NULL DEFAULT '',
|
|
||||||
`scenario_name` VARCHAR(128) NOT NULL DEFAULT '',
|
|
||||||
`game_type` INT NOT NULL DEFAULT 0,
|
|
||||||
`game_type_name` VARCHAR(64) NOT NULL DEFAULT '',
|
|
||||||
`is_team_game` TINYINT(1) NOT NULL DEFAULT 0,
|
|
||||||
`player_count` INT NOT NULL DEFAULT 0,
|
|
||||||
`team_count` INT NOT NULL DEFAULT 0,
|
|
||||||
`team_scores` VARCHAR(64) NOT NULL DEFAULT '', -- comma-separated team totals: t0,t1,...,t7
|
|
||||||
`game_length` INT NOT NULL DEFAULT 0,
|
|
||||||
`kill_limit` INT NOT NULL DEFAULT 0, -- 0 = no limit
|
|
||||||
`respawn_limit` INT NOT NULL DEFAULT 0, -- 0 = no limit
|
|
||||||
`friendly_fire` INT NOT NULL DEFAULT 0, -- percentage
|
|
||||||
`heat_on` TINYINT(1) NOT NULL DEFAULT 0,
|
|
||||||
`armor_mode` TINYINT(1) NOT NULL DEFAULT 0,
|
|
||||||
`unlimited_ammo` TINYINT(1) NOT NULL DEFAULT 0,
|
|
||||||
`is_night` TINYINT(1) NOT NULL DEFAULT 0,
|
|
||||||
`min_tonnage` INT NOT NULL DEFAULT 0,
|
|
||||||
`max_tonnage` INT NOT NULL DEFAULT 0,
|
|
||||||
PRIMARY KEY (`match_id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
||||||
|
|
||||||
-- game_type values (from GameTypes.h):
|
|
||||||
-- 0 StockDestruction 1 StockTeamDestruction
|
|
||||||
-- 2 StockAttrition 3 StockTeamAttrition
|
|
||||||
-- 4 StockCaptureTheFlag 5 StockKingOfTheHill
|
|
||||||
-- 6 StockTeamKingOfTheHill 7 StockTerritories
|
|
||||||
-- 8 StockStealTheBacon 9 StockCaptureBase
|
|
||||||
-- 10 StockDestroyObjective 11 StockEscort
|
|
||||||
-- 12 StockMasterTrial 13 StockSiegeAssault
|
|
||||||
-- 14 StockCampaign 15 CustomDestruction
|
|
||||||
-- 16 CustomTeamDestruction 17 CustomAttrition
|
|
||||||
-- 18 CustomTeamAttrition 19 CustomCaptureTheFlag
|
|
||||||
-- 20 CustomKingOfTheHill 21 CustomTeamKingOfTheHill
|
|
||||||
-- 22 CustomTerritories 23 CustomStealTheBacon
|
|
||||||
-- 24 CustomCaptureBase 25 CustomDestroyObjective
|
|
||||||
-- 26 CustomEscort 27 CustomMasterTrial
|
|
||||||
-- 28 CustomSiegeAssault 29 CustomCampaign
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `player_result` (
|
|
||||||
`result_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
||||||
`match_id` INT UNSIGNED NOT NULL,
|
|
||||||
`player_name` VARCHAR(64) NOT NULL DEFAULT '',
|
|
||||||
`mech_name` VARCHAR(64) NOT NULL DEFAULT '',
|
|
||||||
`team` INT NOT NULL DEFAULT 0, -- 0-7; meaningless in FFA (team_count=0)
|
|
||||||
`score` INT NOT NULL DEFAULT 0,
|
|
||||||
`kills` INT NOT NULL DEFAULT 0,
|
|
||||||
`deaths` INT NOT NULL DEFAULT 0,
|
|
||||||
`is_bot` TINYINT(1) NOT NULL DEFAULT 0,
|
|
||||||
`pilot_decal` INT NOT NULL DEFAULT 0, -- decal index 0-63
|
|
||||||
PRIMARY KEY (`result_id`),
|
|
||||||
KEY `match_id` (`match_id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `pvp` (
|
|
||||||
`pvp_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
||||||
`match_id` INT UNSIGNED NOT NULL,
|
|
||||||
`attacker` VARCHAR(64) NOT NULL DEFAULT '', -- player_name of attacker
|
|
||||||
`victim` VARCHAR(64) NOT NULL DEFAULT '', -- player_name of victim
|
|
||||||
`kills` INT NOT NULL DEFAULT 0, -- times attacker killed victim
|
|
||||||
`score` INT NOT NULL DEFAULT 0, -- score attacker earned from victim
|
|
||||||
PRIMARY KEY (`pvp_id`),
|
|
||||||
KEY `match_id` (`match_id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
||||||
|
|
||||||
|
|
||||||
-- Optional: populated only when ExportEvents=1 in mw4print.ini.
|
|
||||||
-- Can generate thousands of rows per match; off by default.
|
|
||||||
CREATE TABLE IF NOT EXISTS `event` (
|
|
||||||
`event_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
||||||
`match_id` INT UNSIGNED NOT NULL,
|
|
||||||
`event_type` INT NOT NULL DEFAULT 0, -- CBucketManager::Bucket_Type (see below)
|
|
||||||
`actor` VARCHAR(64) NOT NULL DEFAULT '',
|
|
||||||
`target` VARCHAR(64) NOT NULL DEFAULT '',
|
|
||||||
`weapon` INT NOT NULL DEFAULT 0,
|
|
||||||
`body_zone` INT NOT NULL DEFAULT 0, -- DamageObject zone (see below)
|
|
||||||
`param` INT NOT NULL DEFAULT 0, -- context-dependent value
|
|
||||||
PRIMARY KEY (`event_id`),
|
|
||||||
KEY `match_id` (`match_id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
||||||
|
|
||||||
-- event_type values (CBucketManager::Bucket_Type):
|
|
||||||
-- 0 KILL_LINK 1 DEATH_LINK
|
|
||||||
-- 2 KILLS 3 FRIENDLY_KILLS
|
|
||||||
-- 4 ENEMY_KILLS 5 KILLS_BY_TONNAGE
|
|
||||||
-- 6 FRIENDLY_KILLS_BY_TONNAGE 7 ENEMY_KILLS_BY_TONNAGE
|
|
||||||
-- 8 DEATHS 9 SUICIDES
|
|
||||||
-- 10 DAMAGE_INFLICT 11 FRIENDLY_DAMAGE_INFLICT
|
|
||||||
-- 12 ENEMY_DAMAGE_INFLICT 13 DAMAGE_RECEIVE
|
|
||||||
-- 14 FRIENDLY_DAMAGE_RECEIVE 15 ENEMY_DAMAGE_RECEIVE
|
|
||||||
-- 16 COMPONENT_KILLS 17 COMPONENT_DEATHS
|
|
||||||
-- 18 FRIENDLY_COMPONENT_KILLS 19 FRIENDLY_COMPONENT_DEATHS
|
|
||||||
-- 20 ENEMY_COMPONENT_KILLS 21 ENEMY_COMPONENT_DEATHS
|
|
||||||
-- 22 DFA 23 SHOTS_HIT
|
|
||||||
-- 24 SHOTS_FIRED 25 HEAD_SHOTS
|
|
||||||
-- 26 ARM_SHOTS 27 LEG_SHOTS
|
|
||||||
-- 28 TORSO_SHOTS 29 KILLS_PC
|
|
||||||
-- 30 KILLS_AI 31 BLANK
|
|
||||||
-- 32 SHUTDOWN_TIMER 33 OBJECTIVE
|
|
||||||
-- 34 OBJECTIVE_CONTESTED 35 OBJECTIVE_UNCONTESTED
|
|
||||||
-- 36 FLAGS_TAKEN 37 FLAGS_DROPPED
|
|
||||||
-- 38 FLAGS_CAPTURED 39 FLAG_HOLD_TIME
|
|
||||||
-- 40 TIME 41 ALIVE_PLAYERS
|
|
||||||
-- 42 DEAD_PLAYERS 43 CUSTOM
|
|
||||||
-- 44 ENEMY_TURRET_KILLS 45 FRIENDLY_TURRET_KILLS
|
|
||||||
-- 46 ENEMY_BUILDING_KILLS 47 FRIENDLY_BUILDING_KILLS
|
|
||||||
|
|
||||||
-- body_zone values (DamageObject::DamageZone):
|
|
||||||
-- 0 LeftLeg 1 RightLeg 2 LeftArm 3 RightArm
|
|
||||||
-- 4 RightTorso 5 LeftTorso 6 CenterTorso 7 Head
|
|
||||||
-- 8 SpecialZone1 9 SpecialZone2
|
|
||||||
@@ -1,486 +0,0 @@
|
|||||||
// dbexport.cpp - MySQL export implementation for mw4print
|
|
||||||
//
|
|
||||||
// Included directly from ChildView.cpp (same pattern as recscore.cpp).
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "dbexport.h"
|
|
||||||
|
|
||||||
// ---- Config default values -----------------------------------------------
|
|
||||||
|
|
||||||
SDBConfig g_dbConfig = {
|
|
||||||
false, // bEnabled
|
|
||||||
"localhost", // szHost
|
|
||||||
3306, // nPort
|
|
||||||
"firestorm_stats", // szDatabase
|
|
||||||
"mw4", // szUsername
|
|
||||||
"", // szPassword
|
|
||||||
false // bExportEvents
|
|
||||||
};
|
|
||||||
|
|
||||||
// ---- MySQL late binding --------------------------------------------------
|
|
||||||
//
|
|
||||||
// We load libmysql.dll at runtime so the exe does not hard-link against it.
|
|
||||||
// All function pointers are NULL until DB_LoadMySQL() succeeds.
|
|
||||||
|
|
||||||
static HMODULE g_hMySQL = NULL;
|
|
||||||
|
|
||||||
typedef void* MYSQLH; // opaque MYSQL* handle
|
|
||||||
typedef unsigned long MYULONG;
|
|
||||||
typedef unsigned __int64 MYULLONG;
|
|
||||||
|
|
||||||
// MYSQL_OPT_CONNECT_TIMEOUT = 0
|
|
||||||
#define MY_OPT_CONNECT_TIMEOUT 0
|
|
||||||
|
|
||||||
typedef MYSQLH (__cdecl *PFN_mysql_init) (MYSQLH);
|
|
||||||
typedef MYSQLH (__cdecl *PFN_mysql_real_connect) (MYSQLH, const char*, const char*, const char*, const char*, unsigned int, const char*, unsigned long);
|
|
||||||
typedef void (__cdecl *PFN_mysql_options) (MYSQLH, int, const char*);
|
|
||||||
typedef int (__cdecl *PFN_mysql_real_query) (MYSQLH, const char*, unsigned long);
|
|
||||||
typedef MYULLONG (__cdecl *PFN_mysql_insert_id) (MYSQLH);
|
|
||||||
typedef void (__cdecl *PFN_mysql_close) (MYSQLH);
|
|
||||||
typedef const char* (__cdecl *PFN_mysql_error) (MYSQLH);
|
|
||||||
typedef MYULONG (__cdecl *PFN_mysql_escape_string) (char*, const char*, MYULONG);
|
|
||||||
|
|
||||||
static PFN_mysql_init pfn_init = NULL;
|
|
||||||
static PFN_mysql_real_connect pfn_real_connect = NULL;
|
|
||||||
static PFN_mysql_options pfn_options = NULL;
|
|
||||||
static PFN_mysql_real_query pfn_real_query = NULL;
|
|
||||||
static PFN_mysql_insert_id pfn_insert_id = NULL;
|
|
||||||
static PFN_mysql_close pfn_close = NULL;
|
|
||||||
static PFN_mysql_error pfn_error = NULL;
|
|
||||||
static PFN_mysql_escape_string pfn_escape_string = NULL;
|
|
||||||
|
|
||||||
static bool DB_LoadMySQL()
|
|
||||||
{
|
|
||||||
if (g_hMySQL)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// Try app directory first, then system path.
|
|
||||||
char szPath[MAX_PATH];
|
|
||||||
sprintf(szPath, "%s\\libmysql.dll", AssetsDirectory1);
|
|
||||||
g_hMySQL = LoadLibrary(szPath);
|
|
||||||
if (!g_hMySQL)
|
|
||||||
g_hMySQL = LoadLibrary("libmysql.dll");
|
|
||||||
if (!g_hMySQL)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
#define GETPROC(name, pfn) pfn = (PFN_##name)GetProcAddress(g_hMySQL, #name); if (!pfn) { FreeLibrary(g_hMySQL); g_hMySQL=NULL; return false; }
|
|
||||||
GETPROC(mysql_init, pfn_init)
|
|
||||||
GETPROC(mysql_real_connect, pfn_real_connect)
|
|
||||||
GETPROC(mysql_options, pfn_options)
|
|
||||||
GETPROC(mysql_real_query, pfn_real_query)
|
|
||||||
GETPROC(mysql_insert_id, pfn_insert_id)
|
|
||||||
GETPROC(mysql_close, pfn_close)
|
|
||||||
GETPROC(mysql_error, pfn_error)
|
|
||||||
GETPROC(mysql_escape_string, pfn_escape_string)
|
|
||||||
#undef GETPROC
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---- Helpers -------------------------------------------------------------
|
|
||||||
|
|
||||||
// Open a connection using current config. Returns handle on success, NULL
|
|
||||||
// on failure. Caller must call pfn_close on the returned handle.
|
|
||||||
static MYSQLH DB_Connect(char* pszError, int nErrBufSize)
|
|
||||||
{
|
|
||||||
if (!DB_LoadMySQL()) {
|
|
||||||
if (pszError)
|
|
||||||
strncpy(pszError, "libmysql.dll not found. Install MySQL Connector/C and place libmysql.dll next to mw4print.exe.", nErrBufSize - 1);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
MYSQLH h = pfn_init(NULL);
|
|
||||||
if (!h) {
|
|
||||||
if (pszError)
|
|
||||||
strncpy(pszError, "mysql_init failed (out of memory?)", nErrBufSize - 1);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Short connect timeout so the app doesn't hang if server is unreachable.
|
|
||||||
int nTimeout = 5;
|
|
||||||
pfn_options(h, MY_OPT_CONNECT_TIMEOUT, (const char*)&nTimeout);
|
|
||||||
|
|
||||||
MYSQLH conn = pfn_real_connect(h,
|
|
||||||
g_dbConfig.szHost,
|
|
||||||
g_dbConfig.szUsername,
|
|
||||||
g_dbConfig.szPassword,
|
|
||||||
g_dbConfig.szDatabase,
|
|
||||||
(unsigned int)g_dbConfig.nPort,
|
|
||||||
NULL, 0);
|
|
||||||
|
|
||||||
if (!conn) {
|
|
||||||
if (pszError) {
|
|
||||||
strncpy(pszError, pfn_error(h), nErrBufSize - 1);
|
|
||||||
pszError[nErrBufSize - 1] = '\0';
|
|
||||||
}
|
|
||||||
pfn_close(h);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return h;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute a query string; return true on success.
|
|
||||||
static bool DB_Exec(MYSQLH h, const char* pszSQL)
|
|
||||||
{
|
|
||||||
return pfn_real_query(h, pszSQL, (unsigned long)strlen(pszSQL)) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Escape a string for use inside SQL single-quoted literals.
|
|
||||||
// Writes into pszOut (must be at least 2*len+1 bytes).
|
|
||||||
static void DB_Escape(char* pszOut, const char* pszIn)
|
|
||||||
{
|
|
||||||
if (pfn_escape_string)
|
|
||||||
pfn_escape_string(pszOut, pszIn, (MYULONG)strlen(pszIn));
|
|
||||||
else {
|
|
||||||
// Fallback: manual escape of ' and backslash
|
|
||||||
char* dst = pszOut;
|
|
||||||
for (const char* src = pszIn; *src; ++src) {
|
|
||||||
if (*src == '\'' || *src == '\\')
|
|
||||||
*dst++ = '\\';
|
|
||||||
*dst++ = *src;
|
|
||||||
}
|
|
||||||
*dst = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---- CREATE TABLE statements (run on first connect) ----------------------
|
|
||||||
|
|
||||||
static const char* s_szCreateMatch =
|
|
||||||
"CREATE TABLE IF NOT EXISTS `match` ("
|
|
||||||
" `match_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,"
|
|
||||||
" `match_time` DATETIME NOT NULL,"
|
|
||||||
" `server_name` VARCHAR(256) NOT NULL DEFAULT '',"
|
|
||||||
" `server_ip` VARCHAR(64) NOT NULL DEFAULT '',"
|
|
||||||
" `map_name` VARCHAR(128) NOT NULL DEFAULT '',"
|
|
||||||
" `scenario_name` VARCHAR(128) NOT NULL DEFAULT '',"
|
|
||||||
" `game_type` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `game_type_name` VARCHAR(64) NOT NULL DEFAULT '',"
|
|
||||||
" `is_team_game` TINYINT(1) NOT NULL DEFAULT 0,"
|
|
||||||
" `player_count` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `team_count` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `team_scores` VARCHAR(64) NOT NULL DEFAULT '',"
|
|
||||||
" `game_length` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `kill_limit` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `respawn_limit` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `friendly_fire` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `heat_on` TINYINT(1) NOT NULL DEFAULT 0,"
|
|
||||||
" `armor_mode` TINYINT(1) NOT NULL DEFAULT 0,"
|
|
||||||
" `unlimited_ammo` TINYINT(1) NOT NULL DEFAULT 0,"
|
|
||||||
" `is_night` TINYINT(1) NOT NULL DEFAULT 0,"
|
|
||||||
" `min_tonnage` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `max_tonnage` INT NOT NULL DEFAULT 0,"
|
|
||||||
" PRIMARY KEY (`match_id`)"
|
|
||||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8";
|
|
||||||
|
|
||||||
static const char* s_szCreatePlayerResult =
|
|
||||||
"CREATE TABLE IF NOT EXISTS `player_result` ("
|
|
||||||
" `result_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,"
|
|
||||||
" `match_id` INT UNSIGNED NOT NULL,"
|
|
||||||
" `player_name` VARCHAR(64) NOT NULL DEFAULT '',"
|
|
||||||
" `mech_name` VARCHAR(64) NOT NULL DEFAULT '',"
|
|
||||||
" `team` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `score` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `kills` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `deaths` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `is_bot` TINYINT(1) NOT NULL DEFAULT 0,"
|
|
||||||
" `pilot_decal` INT NOT NULL DEFAULT 0,"
|
|
||||||
" PRIMARY KEY (`result_id`),"
|
|
||||||
" KEY `match_id` (`match_id`)"
|
|
||||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8";
|
|
||||||
|
|
||||||
static const char* s_szCreatePVP =
|
|
||||||
"CREATE TABLE IF NOT EXISTS `pvp` ("
|
|
||||||
" `pvp_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,"
|
|
||||||
" `match_id` INT UNSIGNED NOT NULL,"
|
|
||||||
" `attacker` VARCHAR(64) NOT NULL DEFAULT '',"
|
|
||||||
" `victim` VARCHAR(64) NOT NULL DEFAULT '',"
|
|
||||||
" `kills` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `score` INT NOT NULL DEFAULT 0,"
|
|
||||||
" PRIMARY KEY (`pvp_id`),"
|
|
||||||
" KEY `match_id` (`match_id`)"
|
|
||||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8";
|
|
||||||
|
|
||||||
static const char* s_szCreateEvent =
|
|
||||||
"CREATE TABLE IF NOT EXISTS `event` ("
|
|
||||||
" `event_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,"
|
|
||||||
" `match_id` INT UNSIGNED NOT NULL,"
|
|
||||||
" `event_type` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `actor` VARCHAR(64) NOT NULL DEFAULT '',"
|
|
||||||
" `target` VARCHAR(64) NOT NULL DEFAULT '',"
|
|
||||||
" `weapon` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `body_zone` INT NOT NULL DEFAULT 0,"
|
|
||||||
" `param` INT NOT NULL DEFAULT 0,"
|
|
||||||
" PRIMARY KEY (`event_id`),"
|
|
||||||
" KEY `match_id` (`match_id`)"
|
|
||||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8";
|
|
||||||
|
|
||||||
// Map CBucketManager::Bucket_Type int to a game_type name string.
|
|
||||||
static const char* GameTypeName(int n)
|
|
||||||
{
|
|
||||||
switch (n) {
|
|
||||||
case 0: return "StockDestruction";
|
|
||||||
case 1: return "StockTeamDestruction";
|
|
||||||
case 2: return "StockAttrition";
|
|
||||||
case 3: return "StockTeamAttrition";
|
|
||||||
case 4: return "StockCaptureTheFlag";
|
|
||||||
case 5: return "StockKingOfTheHill";
|
|
||||||
case 6: return "StockTeamKingOfTheHill";
|
|
||||||
case 7: return "StockTerritories";
|
|
||||||
case 8: return "StockStealTheBacon";
|
|
||||||
case 9: return "StockCaptureBase";
|
|
||||||
case 10: return "StockDestroyObjective";
|
|
||||||
case 11: return "StockEscort";
|
|
||||||
case 12: return "StockMasterTrial";
|
|
||||||
case 13: return "StockSiegeAssault";
|
|
||||||
case 14: return "StockCampaign";
|
|
||||||
case 15: return "CustomDestruction";
|
|
||||||
case 16: return "CustomTeamDestruction";
|
|
||||||
case 17: return "CustomAttrition";
|
|
||||||
case 18: return "CustomTeamAttrition";
|
|
||||||
case 19: return "CustomCaptureTheFlag";
|
|
||||||
case 20: return "CustomKingOfTheHill";
|
|
||||||
case 21: return "CustomTeamKingOfTheHill";
|
|
||||||
case 22: return "CustomTerritories";
|
|
||||||
case 23: return "CustomStealTheBacon";
|
|
||||||
case 24: return "CustomCaptureBase";
|
|
||||||
case 25: return "CustomDestroyObjective";
|
|
||||||
case 26: return "CustomEscort";
|
|
||||||
case 27: return "CustomMasterTrial";
|
|
||||||
case 28: return "CustomSiegeAssault";
|
|
||||||
case 29: return "CustomCampaign";
|
|
||||||
default: return "Unknown";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resolve a ReplicatorID to a player name by scanning aRSOs[].
|
|
||||||
static const char* ResolvePlayerName(
|
|
||||||
const ReplicatorID& id,
|
|
||||||
PCRecScoreObject aRSOs[],
|
|
||||||
int nPlayers)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < nPlayers; i++) {
|
|
||||||
if (aRSOs[i]->m_who == id)
|
|
||||||
return aRSOs[i]->GetName();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---- Config I/O ----------------------------------------------------------
|
|
||||||
|
|
||||||
static void DB_GetINIPath(char* pszOut)
|
|
||||||
{
|
|
||||||
sprintf(pszOut, "%s\\mw4print.ini", AssetsDirectory1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DB_LoadConfig()
|
|
||||||
{
|
|
||||||
char szINI[MAX_PATH];
|
|
||||||
DB_GetINIPath(szINI);
|
|
||||||
|
|
||||||
const char* sec = "MySQLExport";
|
|
||||||
g_dbConfig.bEnabled = !!GetPrivateProfileInt(sec, "Enabled", 0, szINI);
|
|
||||||
GetPrivateProfileString(sec, "Host", "localhost", g_dbConfig.szHost, sizeof(g_dbConfig.szHost), szINI);
|
|
||||||
g_dbConfig.nPort = GetPrivateProfileInt(sec, "Port", 3306, szINI);
|
|
||||||
GetPrivateProfileString(sec, "Database", "firestorm_stats", g_dbConfig.szDatabase, sizeof(g_dbConfig.szDatabase), szINI);
|
|
||||||
GetPrivateProfileString(sec, "Username", "mw4", g_dbConfig.szUsername, sizeof(g_dbConfig.szUsername), szINI);
|
|
||||||
GetPrivateProfileString(sec, "Password", "", g_dbConfig.szPassword, sizeof(g_dbConfig.szPassword), szINI);
|
|
||||||
g_dbConfig.bExportEvents = !!GetPrivateProfileInt(sec, "ExportEvents", 0, szINI);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DB_SaveConfig()
|
|
||||||
{
|
|
||||||
char szINI[MAX_PATH];
|
|
||||||
DB_GetINIPath(szINI);
|
|
||||||
|
|
||||||
const char* sec = "MySQLExport";
|
|
||||||
char szBuf[32];
|
|
||||||
|
|
||||||
WritePrivateProfileString(sec, "Enabled", g_dbConfig.bEnabled ? "1" : "0", szINI);
|
|
||||||
WritePrivateProfileString(sec, "Host", g_dbConfig.szHost, szINI);
|
|
||||||
_itoa(g_dbConfig.nPort, szBuf, 10);
|
|
||||||
WritePrivateProfileString(sec, "Port", szBuf, szINI);
|
|
||||||
WritePrivateProfileString(sec, "Database", g_dbConfig.szDatabase, szINI);
|
|
||||||
WritePrivateProfileString(sec, "Username", g_dbConfig.szUsername, szINI);
|
|
||||||
WritePrivateProfileString(sec, "Password", g_dbConfig.szPassword, szINI);
|
|
||||||
WritePrivateProfileString(sec, "ExportEvents", g_dbConfig.bExportEvents ? "1" : "0", szINI);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---- Test connection -----------------------------------------------------
|
|
||||||
|
|
||||||
bool DB_TestConnection(char* pszError, int nErrBufSize)
|
|
||||||
{
|
|
||||||
if (pszError && nErrBufSize > 0)
|
|
||||||
pszError[0] = '\0';
|
|
||||||
|
|
||||||
MYSQLH h = DB_Connect(pszError, nErrBufSize);
|
|
||||||
if (!h)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
bool bOK = DB_Exec(h, "SELECT 1");
|
|
||||||
if (!bOK && pszError) {
|
|
||||||
strncpy(pszError, pfn_error(h), nErrBufSize - 1);
|
|
||||||
pszError[nErrBufSize - 1] = '\0';
|
|
||||||
}
|
|
||||||
pfn_close(h);
|
|
||||||
return bOK;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---- Main export ---------------------------------------------------------
|
|
||||||
|
|
||||||
bool DB_ExportMatch(
|
|
||||||
const CRecScoreFull& rsf,
|
|
||||||
PCRecScoreObject aRSOs[],
|
|
||||||
int nPlayers,
|
|
||||||
const int naTeams[8],
|
|
||||||
int nTeamCount,
|
|
||||||
const MWNetMissionParameters& params)
|
|
||||||
{
|
|
||||||
char szError[512];
|
|
||||||
MYSQLH h = DB_Connect(szError, sizeof(szError));
|
|
||||||
if (!h)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
char szSQL[4096];
|
|
||||||
char szEsc[512];
|
|
||||||
bool bOK = true;
|
|
||||||
|
|
||||||
// Ensure tables exist (silent if already present).
|
|
||||||
DB_Exec(h, s_szCreateMatch);
|
|
||||||
DB_Exec(h, s_szCreatePlayerResult);
|
|
||||||
DB_Exec(h, s_szCreatePVP);
|
|
||||||
if (g_dbConfig.bExportEvents)
|
|
||||||
DB_Exec(h, s_szCreateEvent);
|
|
||||||
|
|
||||||
// ---- Insert match row ------------------------------------------------
|
|
||||||
|
|
||||||
// Build team_scores as comma-separated string e.g. "100,80,0,0,0,0,0,0"
|
|
||||||
char szTeamScores[64];
|
|
||||||
sprintf(szTeamScores, "%d,%d,%d,%d,%d,%d,%d,%d",
|
|
||||||
rsf.m_naTeamScores[0], rsf.m_naTeamScores[1],
|
|
||||||
rsf.m_naTeamScores[2], rsf.m_naTeamScores[3],
|
|
||||||
rsf.m_naTeamScores[4], rsf.m_naTeamScores[5],
|
|
||||||
rsf.m_naTeamScores[6], rsf.m_naTeamScores[7]);
|
|
||||||
|
|
||||||
char szServerNameE[512], szServerIPE[512], szMapE[256], szScenarioE[256], szGameTypeNameE[128];
|
|
||||||
DB_Escape(szServerNameE, params.m_serverName);
|
|
||||||
DB_Escape(szServerIPE, params.m_serverIP);
|
|
||||||
DB_Escape(szMapE, params.m_mapName);
|
|
||||||
DB_Escape(szScenarioE, params.m_scenarioName);
|
|
||||||
DB_Escape(szGameTypeNameE, GameTypeName(params.m_ruleType));
|
|
||||||
|
|
||||||
sprintf(szSQL,
|
|
||||||
"INSERT INTO `match` "
|
|
||||||
"(match_time, server_name, server_ip, map_name, scenario_name, "
|
|
||||||
" game_type, game_type_name, is_team_game, player_count, team_count, "
|
|
||||||
" team_scores, game_length, kill_limit, respawn_limit, friendly_fire, "
|
|
||||||
" heat_on, armor_mode, unlimited_ammo, is_night, min_tonnage, max_tonnage) "
|
|
||||||
"VALUES ("
|
|
||||||
"'%04d-%02d-%02d %02d:%02d:%02d'," // match_time
|
|
||||||
"'%s','%s','%s','%s'," // server_name, server_ip, map_name, scenario_name
|
|
||||||
"%d,'%s',%d,%d,%d," // game_type, game_type_name, is_team_game, player_count, team_count
|
|
||||||
"'%s'," // team_scores
|
|
||||||
"%d,%d,%d,%d," // game_length, kill_limit, respawn_limit, friendly_fire
|
|
||||||
"%d,%d,%d,%d,%d,%d" // heat_on, armor_mode, unlimited_ammo, is_night, min_tonnage, max_tonnage
|
|
||||||
")",
|
|
||||||
rsf.m_SysTime.wYear, rsf.m_SysTime.wMonth, rsf.m_SysTime.wDay,
|
|
||||||
rsf.m_SysTime.wHour, rsf.m_SysTime.wMinute, rsf.m_SysTime.wSecond,
|
|
||||||
szServerNameE, szServerIPE, szMapE, szScenarioE,
|
|
||||||
params.m_ruleType, szGameTypeNameE,
|
|
||||||
rsf.m_bTeamGame ? 1 : 0, nPlayers, nTeamCount,
|
|
||||||
szTeamScores,
|
|
||||||
params.m_gameLength,
|
|
||||||
params.m_killLimit ? params.m_killLimitNumber : 0,
|
|
||||||
params.m_respawnLimit ? params.m_respawnLimitNumber : 0,
|
|
||||||
params.m_friendlyFirePercentage,
|
|
||||||
params.m_heatOn ? 1 : 0,
|
|
||||||
params.m_armormodeOn ? 1 : 0,
|
|
||||||
params.m_unlimitedAmmo ? 1 : 0,
|
|
||||||
params.m_isNight ? 1 : 0,
|
|
||||||
params.m_minimumTonnage,
|
|
||||||
params.m_maximumTonnage);
|
|
||||||
|
|
||||||
bOK = DB_Exec(h, szSQL);
|
|
||||||
if (!bOK) {
|
|
||||||
pfn_close(h);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
MYULLONG nMatchID = pfn_insert_id(h);
|
|
||||||
|
|
||||||
// ---- Insert player_result rows ---------------------------------------
|
|
||||||
|
|
||||||
for (int i = 0; i < nPlayers && bOK; i++) {
|
|
||||||
const CRecScoreObject& rso = *aRSOs[i];
|
|
||||||
char szNameE[128], szMechE[128];
|
|
||||||
DB_Escape(szNameE, rso.GetName());
|
|
||||||
DB_Escape(szMechE, rso.GetMech());
|
|
||||||
|
|
||||||
sprintf(szSQL,
|
|
||||||
"INSERT INTO `player_result` "
|
|
||||||
"(match_id, player_name, mech_name, team, score, kills, deaths, is_bot, pilot_decal) "
|
|
||||||
"VALUES (%I64u,'%s','%s',%d,%d,%d,%d,%d,%d)",
|
|
||||||
nMatchID,
|
|
||||||
szNameE, szMechE,
|
|
||||||
rso.m_nPilotTeam,
|
|
||||||
rso.m_nScore,
|
|
||||||
rso.m_nKills,
|
|
||||||
rso.m_nDeaths,
|
|
||||||
rso.m_bBOT ? 1 : 0,
|
|
||||||
rso.m_nPilotDecal);
|
|
||||||
|
|
||||||
bOK = DB_Exec(h, szSQL);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---- Insert pvp rows -------------------------------------------------
|
|
||||||
|
|
||||||
for (int p = 0; p < rsf.m_nPVPs && bOK; p++) {
|
|
||||||
const CRecScoreFull::SPVP_Rec& pvp = rsf.m_pPVPs[p];
|
|
||||||
const char* pszAttacker = ResolvePlayerName(pvp.m_Inf, aRSOs, nPlayers);
|
|
||||||
const char* pszVictim = ResolvePlayerName(pvp.m_Rcv, aRSOs, nPlayers);
|
|
||||||
|
|
||||||
char szAttE[128], szVicE[128];
|
|
||||||
DB_Escape(szAttE, pszAttacker);
|
|
||||||
DB_Escape(szVicE, pszVictim);
|
|
||||||
|
|
||||||
sprintf(szSQL,
|
|
||||||
"INSERT INTO `pvp` (match_id, attacker, victim, kills, score) "
|
|
||||||
"VALUES (%I64u,'%s','%s',%d,%d)",
|
|
||||||
nMatchID, szAttE, szVicE, pvp.m_nKills, pvp.m_nScore);
|
|
||||||
|
|
||||||
bOK = DB_Exec(h, szSQL);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---- Insert event rows (optional) ------------------------------------
|
|
||||||
|
|
||||||
if (bOK && g_dbConfig.bExportEvents) {
|
|
||||||
// Walk the CRecScorePack linked list.
|
|
||||||
const CRecScorePack* pPack = rsf.m_pScorePackStart;
|
|
||||||
while (pPack && bOK) {
|
|
||||||
for (int e = 0; e < pPack->m_nCount && bOK; e++) {
|
|
||||||
const SRecScore& rs = pPack->m_a[e];
|
|
||||||
const char* pszActor = ResolvePlayerName(rs.m_who, aRSOs, nPlayers);
|
|
||||||
const char* pszTarget = ResolvePlayerName(rs.m_whom, aRSOs, nPlayers);
|
|
||||||
char szActE[128], szTgtE[128];
|
|
||||||
DB_Escape(szActE, pszActor);
|
|
||||||
DB_Escape(szTgtE, pszTarget);
|
|
||||||
|
|
||||||
sprintf(szSQL,
|
|
||||||
"INSERT INTO `event` (match_id, event_type, actor, target, weapon, body_zone, param) "
|
|
||||||
"VALUES (%I64u,%d,'%s','%s',%d,%d,%d)",
|
|
||||||
nMatchID,
|
|
||||||
rs.m_nType,
|
|
||||||
szActE, szTgtE,
|
|
||||||
rs.m_nBy,
|
|
||||||
rs.m_Where.m_xWhere,
|
|
||||||
rs.m_nParam);
|
|
||||||
|
|
||||||
bOK = DB_Exec(h, szSQL);
|
|
||||||
}
|
|
||||||
pPack = pPack->m_pNext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pfn_close(h);
|
|
||||||
return bOK;
|
|
||||||
}
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
// dbexport.h - MySQL export interface for mw4print
|
|
||||||
//
|
|
||||||
// Connects to an external MySQL server and writes match results after each
|
|
||||||
// print job. MySQL is loaded at runtime via late binding (libmysql.dll) so
|
|
||||||
// no MySQL SDK is required at compile time.
|
|
||||||
//
|
|
||||||
// Config is stored in mw4print.ini next to the exe:
|
|
||||||
// [MySQLExport]
|
|
||||||
// Enabled=0
|
|
||||||
// Host=192.168.1.100
|
|
||||||
// Port=3306
|
|
||||||
// Database=firestorm_stats
|
|
||||||
// Username=mw4
|
|
||||||
// Password=
|
|
||||||
// ExportEvents=0 (1 = also export per-event SRecScore rows)
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef __DBEXPORT_H__
|
|
||||||
#define __DBEXPORT_H__
|
|
||||||
|
|
||||||
// ---- Config struct -------------------------------------------------------
|
|
||||||
|
|
||||||
struct SDBConfig
|
|
||||||
{
|
|
||||||
bool bEnabled;
|
|
||||||
char szHost[256];
|
|
||||||
int nPort;
|
|
||||||
char szDatabase[64];
|
|
||||||
char szUsername[64];
|
|
||||||
char szPassword[64];
|
|
||||||
bool bExportEvents; // export individual SRecScore events (can be many rows)
|
|
||||||
};
|
|
||||||
|
|
||||||
extern SDBConfig g_dbConfig;
|
|
||||||
|
|
||||||
// ---- Public API ----------------------------------------------------------
|
|
||||||
|
|
||||||
// Load / save config from mw4print.ini in the app directory.
|
|
||||||
void DB_LoadConfig();
|
|
||||||
void DB_SaveConfig();
|
|
||||||
|
|
||||||
// Try to open a connection using current g_dbConfig, run a trivial query,
|
|
||||||
// then disconnect. Returns true on success; on failure fills pszError
|
|
||||||
// (up to nErrBufSize bytes) with the MySQL error string.
|
|
||||||
bool DB_TestConnection(char* pszError, int nErrBufSize);
|
|
||||||
|
|
||||||
// Export one completed match to the database. Called from
|
|
||||||
// CRecScoreFull::DoPrint() just before PrintDlg().
|
|
||||||
// Returns true on success.
|
|
||||||
bool DB_ExportMatch(
|
|
||||||
const CRecScoreFull& rsf,
|
|
||||||
PCRecScoreObject aRSOs[],
|
|
||||||
int nPlayers,
|
|
||||||
const int naTeams[8],
|
|
||||||
int nTeamCount,
|
|
||||||
const MWNetMissionParameters& params
|
|
||||||
);
|
|
||||||
|
|
||||||
#endif // __DBEXPORT_H__
|
|
||||||
@@ -93,9 +93,6 @@ BEGIN
|
|||||||
MENUITEM "&Log report...\t^L", ID_FILE_LOGREPORT
|
MENUITEM "&Log report...\t^L", ID_FILE_LOGREPORT
|
||||||
MENUITEM "Log report(&Block)...\t^B", ID_FILE_LOG2DATES
|
MENUITEM "Log report(&Block)...\t^B", ID_FILE_LOG2DATES
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Database Settings...\t^D", ID_FILE_DBSETTINGS
|
|
||||||
MENUITEM "Ban&ner Setting...", ID_FILE_BANNERSETTING
|
|
||||||
MENUITEM SEPARATOR
|
|
||||||
MENUITEM "E&xit", ID_APP_EXIT
|
MENUITEM "E&xit", ID_APP_EXIT
|
||||||
END
|
END
|
||||||
POPUP "&Help"
|
POPUP "&Help"
|
||||||
@@ -113,7 +110,6 @@ END
|
|||||||
IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE
|
IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE
|
||||||
BEGIN
|
BEGIN
|
||||||
"B", ID_FILE_LOG2DATES, VIRTKEY, CONTROL, NOINVERT
|
"B", ID_FILE_LOG2DATES, VIRTKEY, CONTROL, NOINVERT
|
||||||
"D", ID_FILE_DBSETTINGS, VIRTKEY, CONTROL, NOINVERT
|
|
||||||
"L", ID_FILE_LOGREPORT, VIRTKEY, CONTROL, NOINVERT
|
"L", ID_FILE_LOGREPORT, VIRTKEY, CONTROL, NOINVERT
|
||||||
"O", ID_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT
|
"O", ID_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT
|
||||||
END
|
END
|
||||||
@@ -130,50 +126,12 @@ CAPTION "About mw4print"
|
|||||||
FONT 8, "MS Sans Serif"
|
FONT 8, "MS Sans Serif"
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
|
ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
|
||||||
LTEXT "mw4print Version 2.0",IDC_STATIC,40,10,119,8,
|
LTEXT "mw4print Version 1.0",IDC_STATIC,40,10,119,8,
|
||||||
SS_NOPREFIX
|
SS_NOPREFIX
|
||||||
LTEXT "Copyright (C) 2026",IDC_STATIC,40,25,119,8
|
LTEXT "Copyright (C) 2002",IDC_STATIC,40,25,119,8
|
||||||
DEFPUSHBUTTON "OK",IDOK,178,7,50,14,WS_GROUP
|
DEFPUSHBUTTON "OK",IDOK,178,7,50,14,WS_GROUP
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_BANNER_SETTING DIALOG DISCARDABLE 0, 0, 300, 65
|
|
||||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
|
||||||
CAPTION "Banner Setting"
|
|
||||||
FONT 8, "MS Sans Serif"
|
|
||||||
BEGIN
|
|
||||||
LTEXT "Banner text:",IDC_STATIC,7,9,50,8
|
|
||||||
EDITTEXT IDC_BANNER_TEXT,60,7,233,14,ES_AUTOHSCROLL
|
|
||||||
DEFPUSHBUTTON "OK",IDOK,189,43,50,14
|
|
||||||
PUSHBUTTON "Cancel",IDCANCEL,244,43,50,14
|
|
||||||
LTEXT "(Printed at the bottom of every score sheet. Leave blank to hide.)",
|
|
||||||
IDC_STATIC,7,28,286,16
|
|
||||||
END
|
|
||||||
|
|
||||||
IDD_DB_SETTINGS DIALOG DISCARDABLE 0, 0, 300, 175
|
|
||||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
|
||||||
CAPTION "Database Export Settings"
|
|
||||||
FONT 8, "MS Sans Serif"
|
|
||||||
BEGIN
|
|
||||||
CONTROL "Enable MySQL export",IDC_DB_ENABLED,"Button",
|
|
||||||
BS_AUTOCHECKBOX | WS_TABSTOP,7,7,200,12
|
|
||||||
LTEXT "Host:",IDC_STATIC,7,26,30,8
|
|
||||||
EDITTEXT IDC_DB_HOST,55,24,170,14,ES_AUTOHSCROLL
|
|
||||||
LTEXT "Port:",IDC_STATIC,7,46,30,8
|
|
||||||
EDITTEXT IDC_DB_PORT,55,44,50,14,ES_AUTOHSCROLL | ES_NUMBER
|
|
||||||
LTEXT "Database:",IDC_STATIC,7,66,40,8
|
|
||||||
EDITTEXT IDC_DB_DATABASE,55,64,170,14,ES_AUTOHSCROLL
|
|
||||||
LTEXT "Username:",IDC_STATIC,7,86,40,8
|
|
||||||
EDITTEXT IDC_DB_USERNAME,55,84,170,14,ES_AUTOHSCROLL
|
|
||||||
LTEXT "Password:",IDC_STATIC,7,106,40,8
|
|
||||||
EDITTEXT IDC_DB_PASSWORD,55,104,170,14,ES_AUTOHSCROLL | ES_PASSWORD
|
|
||||||
CONTROL "Export individual events (many rows)",IDC_DB_EXPORTEVENTS,
|
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,123,200,12
|
|
||||||
PUSHBUTTON "Test Connection",IDC_DB_TEST,226,104,68,14
|
|
||||||
LTEXT "",IDC_DB_STATUS,7,141,286,18,SS_NOPREFIX
|
|
||||||
DEFPUSHBUTTON "OK",IDOK,189,155,50,14
|
|
||||||
PUSHBUTTON "Cancel",IDCANCEL,244,155,50,14
|
|
||||||
END
|
|
||||||
|
|
||||||
IDD_GET_2DATES DIALOG DISCARDABLE 0, 0, 187, 75
|
IDD_GET_2DATES DIALOG DISCARDABLE 0, 0, 187, 75
|
||||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Date selection"
|
CAPTION "Date selection"
|
||||||
@@ -199,8 +157,8 @@ END
|
|||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 2,0,0,0
|
FILEVERSION 1,0,0,1
|
||||||
PRODUCTVERSION 2,0,0,0
|
PRODUCTVERSION 1,0,0,1
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
@@ -217,13 +175,13 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "\0"
|
VALUE "CompanyName", "\0"
|
||||||
VALUE "FileDescription", "mw4print MFC Application\0"
|
VALUE "FileDescription", "mw4print MFC Application\0"
|
||||||
VALUE "FileVersion", "2, 0, 0, 0\0"
|
VALUE "FileVersion", "1, 0, 0, 1\0"
|
||||||
VALUE "InternalName", "mw4print\0"
|
VALUE "InternalName", "mw4print\0"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2026\0"
|
VALUE "LegalCopyright", "Copyright (C) 2002\0"
|
||||||
VALUE "LegalTrademarks", "\0"
|
VALUE "LegalTrademarks", "\0"
|
||||||
VALUE "OriginalFilename", "mw4print.EXE\0"
|
VALUE "OriginalFilename", "mw4print.EXE\0"
|
||||||
VALUE "ProductName", "mw4print Application\0"
|
VALUE "ProductName", "mw4print Application\0"
|
||||||
VALUE "ProductVersion", "2, 0, 0, 0\0"
|
VALUE "ProductVersion", "1, 0, 0, 1\0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|||||||
@@ -268,10 +268,6 @@ static RECT s_rcTextMargin; // check!!! - margin 2 panes on bottom relative to t
|
|||||||
// so g_aFonts[FNTI_INFO_TEXT/FNTI_INFO_TEXT_BOLD].m_nTextHeight should less then s_nTextHeight
|
// so g_aFonts[FNTI_INFO_TEXT/FNTI_INFO_TEXT_BOLD].m_nTextHeight should less then s_nTextHeight
|
||||||
static int s_nTextHeight; // check!!! - text line height
|
static int s_nTextHeight; // check!!! - text line height
|
||||||
|
|
||||||
// Configurable banner text printed at the bottom of each sheet.
|
|
||||||
// Set via [battle tech print] BannerText= in options.ini next to the exe.
|
|
||||||
char g_szPrintBanner[256] = "Join the worlds greatest Battletech community at WWW.MECHJOCK.COM today!";
|
|
||||||
|
|
||||||
void _stdcall GetFileName4GUID(char szBuf[256], const char* pcszDrv, const char* pcszPath, const char* pcszExt, const GUID& guid = *(const GUID*)NULL);
|
void _stdcall GetFileName4GUID(char szBuf[256], const char* pcszDrv, const char* pcszPath, const char* pcszExt, const GUID& guid = *(const GUID*)NULL);
|
||||||
|
|
||||||
void WriteMString(MemoryStream& mf, const MString& ms)
|
void WriteMString(MemoryStream& mf, const MString& ms)
|
||||||
@@ -1012,27 +1008,27 @@ const char* ArmorZoneStr(int nArmorZone)
|
|||||||
case Adept::DamageObject::NullArmorZone:
|
case Adept::DamageObject::NullArmorZone:
|
||||||
return "()";
|
return "()";
|
||||||
case Adept::DamageObject::LeftLegArmorZone:
|
case Adept::DamageObject::LeftLegArmorZone:
|
||||||
return "Left Leg";
|
return "왼발";
|
||||||
case Adept::DamageObject::RightLegArmorZone:
|
case Adept::DamageObject::RightLegArmorZone:
|
||||||
return "Right Leg";
|
return "오른발";
|
||||||
case Adept::DamageObject::LeftArmArmorZone:
|
case Adept::DamageObject::LeftArmArmorZone:
|
||||||
return "Left Arm";
|
return "왼팔";
|
||||||
case Adept::DamageObject::RightArmArmorZone:
|
case Adept::DamageObject::RightArmArmorZone:
|
||||||
return "Right Arm";
|
return "오른팔";
|
||||||
case Adept::DamageObject::RightTorsoArmorZone:
|
case Adept::DamageObject::RightTorsoArmorZone:
|
||||||
return "Right Torso";
|
return "우측";
|
||||||
case Adept::DamageObject::LeftTorsoArmorZone:
|
case Adept::DamageObject::LeftTorsoArmorZone:
|
||||||
return "Left Torso";
|
return "좌측";
|
||||||
case Adept::DamageObject::CenterTorsoArmorZone:
|
case Adept::DamageObject::CenterTorsoArmorZone:
|
||||||
return "Front";
|
return "전면";
|
||||||
case Adept::DamageObject::CenterRearTorsoArmorZone:
|
case Adept::DamageObject::CenterRearTorsoArmorZone:
|
||||||
return "Rear";
|
return "후면";
|
||||||
case Adept::DamageObject::HeadArmorZone:
|
case Adept::DamageObject::HeadArmorZone:
|
||||||
return "Head";
|
return "머리";
|
||||||
case Adept::DamageObject::SpecialArmorZone1:
|
case Adept::DamageObject::SpecialArmorZone1:
|
||||||
return "Aux Device 1";
|
return "보조장치1";
|
||||||
case Adept::DamageObject::SpecialArmorZone2:
|
case Adept::DamageObject::SpecialArmorZone2:
|
||||||
return "Aux Device 2";
|
return "보조장치2";
|
||||||
case Adept::DamageObject::DefaultArmorZone:
|
case Adept::DamageObject::DefaultArmorZone:
|
||||||
return "Default";
|
return "Default";
|
||||||
}
|
}
|
||||||
@@ -2000,83 +1996,83 @@ public:
|
|||||||
static SMSGFMT s_aKill[20][2] = {
|
static SMSGFMT s_aKill[20][2] = {
|
||||||
{
|
{
|
||||||
{ "%s's %s destroys %s's %s!", 0 }, // ok!
|
{ "%s's %s destroys %s's %s!", 0 }, // ok!
|
||||||
{ "%s's %s destroyed %s's %s!", 0 }, // ok!
|
{ "%s의 %s, %s의 %s을(를) 파괴하다!", 0 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s's %s explodes in a fire-ball, thanks to %s.", 1 }, // ok!
|
{ "%s's %s explodes in a fire-ball, thanks to %s.", 1 }, // ok!
|
||||||
{ "%s's %s explodes in flames! %s lands a perfect hit!", 1 }, // ok!
|
{ "%s의 %s, 각 기관부의 화염으로 폭발! %s의 절묘한 공격성공!", 1 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s delivers the last blow as %s's %s explodes in flames!", 2 }, // ok!
|
{ "%s delivers the last blow as %s's %s explodes in flames!", 2 }, // ok!
|
||||||
{ "%s took a hit to %s's %s!", 2 - 100}, // ok!
|
{ "%s는 %s의 %s에!", 2 - 100}, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Smoking wreckage is all that's left of %s's %s after %s delivers the fatal blow!", 1 },
|
{ "Smoking wreckage is all that's left of %s's %s after %s delivers the fatal blow!", 1 },
|
||||||
{ "%s's merciless assault leaves only burning wreckage of %s's %s.", 2 }, // ok!
|
{ "%s의 무자비한 공격으로 %s의 %s 불타는 잔해만 남길 것이다.", 2 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Glorious victory goes to %s as the wreckage from %s's %s lies burning on the battlefield!", 2 },
|
{ "Glorious victory goes to %s as the wreckage from %s's %s lies burning on the battlefield!", 2 },
|
||||||
{ "The battle escalates rapidly - %s's survival probability is 0%%!", 8 }, // ok!
|
{ "전황은 급속도로 진전, %s의 생존가능성은 0%%!", 8 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s's %s is put out of it's misery by a devastating shot from %s.", 1 },
|
{ "%s's %s is put out of it's misery by a devastating shot from %s.", 1 },
|
||||||
{ "Under %s's overwhelming firepower, %s crumbles miserably.", 4 }, // ok!
|
{ "%s의 압도적인 화력 앞에 %s 처참히 무너지고 있다.", 4 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s racks up another kill marker from reducing %s's %s to rubble!", 2 },
|
{ "%s racks up another kill marker from reducing %s's %s to rubble!", 2 },
|
||||||
{ "%s knocked out %s's %s and earned a new kill mark.", 2 }, // ok!
|
{ "%s %s의 %s을(를) 때려 눕히고, 새로운 킬마크를 얻었다.", 2 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Fresh paint is applied to %s's %s to mark the destruction of %s's %s!", 0 }, // ok!
|
{ "Fresh paint is applied to %s's %s to mark the destruction of %s's %s!", 0 }, // ok!
|
||||||
{ "%s added a kill mark on %s for shooting down %s.", 0 - 100 },
|
{ "%s는 %s를 격추한 킬마크를 %s에 추가했다.", 0 - 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "The burning wreckage of %s's %s is a reminder to all of the prowess of %s's battle skills!", 1 },
|
{ "The burning wreckage of %s's %s is a reminder to all of the prowess of %s's battle skills!", 1 },
|
||||||
{ "The wreckage of %s will be %s's trophy of victory.", 7 }, // ok!
|
{ "%s의 잔해는 %s이(가) 가져갈 승리의 기념품이 될것이다.", 7 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "The thunderous explosion of %s's %s is music to the ears of %s!", 1 },
|
{ "The thunderous explosion of %s's %s is music to the ears of %s!", 1 },
|
||||||
{ "A death prelude echoes in %s's ears. The conductor: %s.", 7 }, // ok!
|
{ "%s의 귀에 들려오는 죽음의 전주곡. 지휘자는 %s.", 7 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s's %s is destroyed by %s's %s.", 3 },
|
{ "%s's %s is destroyed by %s's %s.", 3 },
|
||||||
{ "%s's %s was destroyed by %s's %s.", 3 }, // ok!
|
{ "%s'의 %s, %s의 %s에게 파괴되었다.", 3 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s brings the four horsemen of the apocalypse down upon %s.", 4 },
|
{ "%s brings the four horsemen of the apocalypse down upon %s.", 4 },
|
||||||
{ "The pendulum of judgment swung by %s strikes %s.", 4 }, // ok!
|
{ "%s(이)가 휘두르는 심판의 추가 %s에게 작렬했다.", 4 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s's life flashes as %s reduces the %s to a burning wreck.", 5 },
|
{ "%s's life flashes as %s reduces the %s to a burning wreck.", 5 },
|
||||||
{ "On %s's last lifeline, %s!", 7 - 100 }, // ok!
|
{ "%s의 마지막 생명줄에, %s !", 7 - 100 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s is deafened by the resounding roar of the exploding %s, thanks to %s.", 1 },
|
{ "%s is deafened by the resounding roar of the exploding %s, thanks to %s.", 1 },
|
||||||
{ "%s's mech explodes skyward. Glory to %s!", 7 }, // ok!
|
{ "%s 기체의 폭발소리와 함께, 저 하늘로 날아갔다. %s에게 영광을!", 7 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "A kill marker is placed on %s's %s to mark the victory over %s.", 6 },
|
{ "A kill marker is placed on %s's %s to mark the victory over %s.", 6 },
|
||||||
{ "A new kill mark should be added to %s's %s, victim: %s", 6 }, // ok!
|
{ "%s의 %s에 새로운 킬마크를 추가해야 할 듯, 희생자는 %s", 6 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s is delivered unto the inferno with regards from %s.", 7 },
|
{ "%s is delivered unto the inferno with regards from %s.", 7 },
|
||||||
{ "%s headed to hell under %s's escort. Rest in peace, %s!", 9 }, // ok!
|
{ "%s, %s의 호위하에 지옥으로 향했다. %s에게 명복을!", 9 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Another kill marker is given up by %s, as %s celebrates victory.", 7 },
|
{ "Another kill marker is given up by %s, as %s celebrates victory.", 7 },
|
||||||
{ "%s became %s's new kill mark. Rest in peace...", 7 - 100 },
|
{ "%s, %s의 새로운 킬 마크가 되었다. 영원한 안식을…", 7 - 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Best wishes in the afterlife are presented to %s from %s.", 7 },
|
{ "Best wishes in the afterlife are presented to %s from %s.", 7 },
|
||||||
{ "All that remains for %s is revenge against %s!", 7 }, // ok!
|
{ "%s에게 남은 것은 오직 %s에 대한 복수뿐!", 7 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Tragedy strikes %s as %s guns the %s down.", 5 },
|
{ "Tragedy strikes %s as %s guns the %s down.", 5 },
|
||||||
{ "%s brought all firepower to bear and destroyed %s's %s.", 2 }, // ok!
|
{ "%s 모든 화력을 동원해 %s의 %s을(를) 파괴했다.", 2 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s earns the revenge of %s after the tragic destruction of the %s.", 2 },
|
{ "%s earns the revenge of %s after the tragic destruction of the %s.", 2 },
|
||||||
{ "A tragic end for %s! %s can only watch %s in despair.", 9 }, // ok!
|
{ "%s의 비극적인 최후! %s 절망하는 %s을(를) 지켜볼 뿐이다.", 9 }, // ok!
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2087,11 +2083,11 @@ static SMSGFMT s_aKill[20][2] = {
|
|||||||
static SMSGFMT s_aSuicide[2][2] = {
|
static SMSGFMT s_aSuicide[2][2] = {
|
||||||
{
|
{
|
||||||
{ "%s leaves the battlefield in disgrace after causing the destruction of the %s.", 0 },
|
{ "%s leaves the battlefield in disgrace after causing the destruction of the %s.", 0 },
|
||||||
{ "%s self-destructed! %s left the battlefield in disgrace!", 2 },
|
{ "%s 자폭! %s 불명예스럽게 전장을 떠났다!", 2 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s will not grace the halls of the honored mechwarriors after self-destructing the %s.", 0 },
|
{ "%s will not grace the halls of the honored mechwarriors after self-destructing the %s.", 0 },
|
||||||
{ "%s self-destructed! Coward, do you truly desire victory?", 3 },
|
{ "%s 자폭! 비겁자여, 진실로 승리를 원하는가?", 3 },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2116,43 +2112,43 @@ static SMSGFMT s_aSuicide[2][2] = {
|
|||||||
static SMSGFMT s_aShot[10][2] = {
|
static SMSGFMT s_aShot[10][2] = {
|
||||||
{
|
{
|
||||||
{ "%s's %s fires the %s and damages the %s of %s's %s.", 0 },
|
{ "%s's %s fires the %s and damages the %s of %s's %s.", 0 },
|
||||||
{ "%s attacked %s's %s with %s", 1 }, // ok!
|
{ "%s %s의 %s에 %s으로 공격했다", 1 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s fires the %s's %s and decimates the %s of %s's %s.", 2 },
|
{ "%s fires the %s's %s and decimates the %s of %s's %s.", 2 },
|
||||||
{ "%s piloting %s damaged %s's %s on %s's %s.", 2 },
|
{ "%s이(가) 탑승한 %s, %s로 %s이(가) 탑승한 %s의 %s에 피해를 입혔다.", 2 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s's %s takes a devastating hit in the %s from %s.", 3 },
|
{ "%s's %s takes a devastating hit in the %s from %s.", 3 },
|
||||||
{ "%s's %s took damage to the %s under %s's overwhelming attack.", 4 }, // ok!
|
{ "%s의 %s, %s의 압도적인 공격에 %s에 피해를 입었다.", 4 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s's %s suffers a direct hit to it's %s from %s's %s.", 5 },
|
{ "%s's %s suffers a direct hit to it's %s from %s's %s.", 5 },
|
||||||
{ "%s's %s took direct damage from %s's %s. Damage: %s!", 6 -100},
|
{ "%s의 %s은(는) %s의 %s에 직접적인 피해를 받았다. 피해 %s!", 6 -100},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s damages %s's %s.", 7 },
|
{ "%s damages %s's %s.", 7 },
|
||||||
{ "%s dealt damage to %s's %s..", 7 }, // ok!
|
{ "%s, %s의 %s에 피해를 입혔다..", 7 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Dense black smoke pours from %s's %s as a result of %s's targeted hit.", 8 },
|
{ "Dense black smoke pours from %s's %s as a result of %s's targeted hit.", 8 },
|
||||||
{ "Black smoke billows from %s's %s from %s's precise attack.", 7 }, // ok!
|
{ "%s의 절묘한 공격으로 %s의 %s에서 검은 연기가 퍼지고 있다.", 7 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Fire boils from the damaged %s of %s's %s after %s hits it with a %s.", 9 },
|
{ "Fire boils from the damaged %s of %s's %s after %s hits it with a %s.", 9 },
|
||||||
{ "%s fired %s, dealing damage to the %s of %s's %s.", 10 }, // ok!
|
{ "%s %s을(를) 발사하여, %s이(가) 탑승한 %s의 %s에 피해를 발생시켰다.", 10 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "Smoke and fire are trailing from %s's %s, all results of the %s blast inflicted by %s.", 11 },
|
{ "Smoke and fire are trailing from %s's %s, all results of the %s blast inflicted by %s.", 11 },
|
||||||
{ "Fire and smoke engulf %s's mech from %s's %s attack.", 15 }, // ok!
|
{ "%s의 %s 공격에, 불과 연기가 %s의 기체를 뒤덮고 있다.", 15 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s targets and fires the %s; %s cries in dismay as the %s's %s is damaged.", 10 },
|
{ "%s targets and fires the %s; %s cries in dismay as the %s's %s is damaged.", 10 },
|
||||||
{ "%s aimed %s and pulled the trigger, hitting the %s of %s's %s.", 10 }, // ok!
|
{ "%s %s을(를) 조준하여 %s이(가) 탑승한 %s의 %s에 맞춘 후 방아쇠를 당겼다.", 10 }, // ok!
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "%s takes a severe wound to the %s as %s aims for the %s again.", 13 },
|
{ "%s takes a severe wound to the %s as %s aims for the %s again.", 13 },
|
||||||
{ "%s aimed again at %s's %s and fired. %s seems to have taken serious damage to %s.", 14 -100},
|
{ "%s 다시 %s의 %s을(를) 조준하여 사격했다. %s, %s에 심각한 피해를 입은 듯.", 14 -100},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2160,19 +2156,19 @@ static SMSGFMT s_aShot[10][2] = {
|
|||||||
static SMSGFMT s_aCTF[1][2] = {
|
static SMSGFMT s_aCTF[1][2] = {
|
||||||
{
|
{
|
||||||
{ "%s captured flag.", 0 },
|
{ "%s captured flag.", 0 },
|
||||||
{ "%s captured the flag!", 0 },
|
{ "%s, 깃발 획득!.", 0 },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
static SMSGFMT s_aFBK[1][2] = {
|
static SMSGFMT s_aFBK[1][2] = {
|
||||||
{
|
{
|
||||||
{ "%s destroyed friendly building.", 0 },
|
{ "%s destroyed friendly building.", 0 },
|
||||||
{ "%s captured the flag!", 0 },
|
{ "%s, 깃발 획득!.", 0 },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
static SMSGFMT s_aEBK[1][2] = {
|
static SMSGFMT s_aEBK[1][2] = {
|
||||||
{
|
{
|
||||||
{ "%s destroyed enemy building.", 0 },
|
{ "%s destroyed enemy building.", 0 },
|
||||||
{ "%s captured the flag!", 0 },
|
{ "%s, 깃발 획득!.", 0 },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const SMSGFMT* pcFMT;
|
const SMSGFMT* pcFMT;
|
||||||
@@ -2606,15 +2602,6 @@ int CRecScoreFull::DoPrint() const
|
|||||||
MemoryStream stream(m_pMissionParam, m_nMissionParamSize, 0);
|
MemoryStream stream(m_pMissionParam, m_nMissionParamSize, 0);
|
||||||
params.LoadParameters(&stream);
|
params.LoadParameters(&stream);
|
||||||
|
|
||||||
#ifdef MW4PRINT
|
|
||||||
// ---- Database export (before printing) ----
|
|
||||||
// Export match data to the external MySQL database if configured.
|
|
||||||
if (g_dbConfig.bEnabled) {
|
|
||||||
DB_ExportMatch(*this, aRSOs, nPlayers, naTeams, nTeamCount, params);
|
|
||||||
}
|
|
||||||
// -------------------------------------------
|
|
||||||
#endif // MW4PRINT
|
|
||||||
|
|
||||||
static int s_nIndex = -1; // for job name - not important!!
|
static int s_nIndex = -1; // for job name - not important!!
|
||||||
if (++s_nIndex >= 10)
|
if (++s_nIndex >= 10)
|
||||||
s_nIndex = 0;
|
s_nIndex = 0;
|
||||||
@@ -2938,7 +2925,8 @@ void CRecScoreFull::DoPrint(HDC hDC, const RECT& rcDraw, const POINT& DPI, int n
|
|||||||
|
|
||||||
Rectangle(hDC, rcMH.left, rcURL.top, rcMH.right, rcURL.bottom);
|
Rectangle(hDC, rcMH.left, rcURL.top, rcMH.right, rcURL.bottom);
|
||||||
|
|
||||||
DrawText(hDC, g_szPrintBanner, strlen(g_szPrintBanner), &rcURL, DT_CENTER | DT_NOPREFIX | DT_SINGLELINE | DT_VCENTER);
|
static const char s_szURL[] = "Join the worlds greatest Battletech community at WWW.MECHJOCK.COM today!";
|
||||||
|
DrawText(hDC, s_szURL, strlen(s_szURL), &rcURL, DT_CENTER | DT_NOPREFIX | DT_SINGLELINE | DT_VCENTER);
|
||||||
|
|
||||||
SelectObject(hDC, hFontOld);
|
SelectObject(hDC, hFontOld);
|
||||||
// end URL Text
|
// end URL Text
|
||||||
@@ -3510,11 +3498,6 @@ void CRecScoreFull::LoadPrintParams() const
|
|||||||
LoadPrintParam(strOI, "TextMarginR", s_rcTextMargin.right, U_point(300), 0, U_cm(100));
|
LoadPrintParam(strOI, "TextMarginR", s_rcTextMargin.right, U_point(300), 0, U_cm(100));
|
||||||
LoadPrintParam(strOI, "TextMarginB", s_rcTextMargin.bottom, U_point(300), 0, U_cm(100));
|
LoadPrintParam(strOI, "TextMarginB", s_rcTextMargin.bottom, U_point(300), 0, U_cm(100));
|
||||||
LoadPrintParam(strOI, "TextHeight", s_nTextHeight, U_point(1100), U_point(600), U_point(1500));
|
LoadPrintParam(strOI, "TextHeight", s_nTextHeight, U_point(1100), U_point(600), U_point(1500));
|
||||||
|
|
||||||
// Configurable banner/URL text printed at the bottom of each sheet.
|
|
||||||
GetPrivateProfileString("battle tech print", "BannerText",
|
|
||||||
"Join the worlds greatest Battletech community at WWW.MECHJOCK.COM today!",
|
|
||||||
g_szPrintBanner, sizeof(g_szPrintBanner), strOI);
|
|
||||||
LoadPrintParam(strOI, "ImageTitleHeight", g_aFonts[FNTI_IMAGE_TITLE].m_nTextHeight, U_point(1500), U_point(900), U_point(2000));
|
LoadPrintParam(strOI, "ImageTitleHeight", g_aFonts[FNTI_IMAGE_TITLE].m_nTextHeight, U_point(1500), U_point(900), U_point(2000));
|
||||||
LoadPrintParam(strOI, "TableTextHeight", g_aFonts[FNTI_TABLE_TEXT].m_nTextHeight, U_point(900), U_point(600), U_point(1200));
|
LoadPrintParam(strOI, "TableTextHeight", g_aFonts[FNTI_TABLE_TEXT].m_nTextHeight, U_point(900), U_point(600), U_point(1200));
|
||||||
LoadPrintParam(strOI, "MHTextHeight", g_aFonts[FNTI_MISSION_HIGHLIGHTS].m_nTextHeight, U_point(1200), U_point(800), U_point(1600));
|
LoadPrintParam(strOI, "MHTextHeight", g_aFonts[FNTI_MISSION_HIGHLIGHTS].m_nTextHeight, U_point(1200), U_point(800), U_point(1600));
|
||||||
|
|||||||
@@ -10,31 +10,15 @@
|
|||||||
#define IDC_DNT_END 1001
|
#define IDC_DNT_END 1001
|
||||||
#define ID_FILE_LOGREPORT 32771
|
#define ID_FILE_LOGREPORT 32771
|
||||||
#define ID_FILE_LOG2DATES 32772
|
#define ID_FILE_LOG2DATES 32772
|
||||||
#define ID_FILE_DBSETTINGS 32773
|
|
||||||
#define ID_FILE_BANNERSETTING 32774
|
|
||||||
|
|
||||||
#define IDD_DB_SETTINGS 131
|
|
||||||
#define IDD_BANNER_SETTING 132
|
|
||||||
|
|
||||||
#define IDC_DB_ENABLED 1002
|
|
||||||
#define IDC_DB_HOST 1003
|
|
||||||
#define IDC_DB_PORT 1004
|
|
||||||
#define IDC_DB_DATABASE 1005
|
|
||||||
#define IDC_DB_USERNAME 1006
|
|
||||||
#define IDC_DB_PASSWORD 1007
|
|
||||||
#define IDC_DB_TEST 1008
|
|
||||||
#define IDC_DB_STATUS 1009
|
|
||||||
#define IDC_DB_EXPORTEVENTS 1010
|
|
||||||
#define IDC_BANNER_TEXT 1011
|
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
//
|
//
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_3D_CONTROLS 1
|
#define _APS_3D_CONTROLS 1
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 133
|
#define _APS_NEXT_RESOURCE_VALUE 131
|
||||||
#define _APS_NEXT_COMMAND_VALUE 32775
|
#define _APS_NEXT_COMMAND_VALUE 32772
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1012
|
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
// forward declaration
|
// forward declaration
|
||||||
class FPInterface;
|
class FPInterface;
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//ッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッ
|
||||||
// A data channel is a homogeneous collection of objects of a user defined
|
// A data channel is a homogeneous collection of objects of a user defined
|
||||||
// type (data objects). Data channels are uniquely identified by a Class_ID.
|
// type (data objects). Data channels are uniquely identified by a Class_ID.
|
||||||
//
|
//
|
||||||
@@ -52,7 +52,7 @@ class IDataChannel : public InterfaceServer
|
|||||||
#define DATACHANNEL_INTERFACE Interface_ID(0x38a718a8, 0x14685b4b)
|
#define DATACHANNEL_INTERFACE Interface_ID(0x38a718a8, 0x14685b4b)
|
||||||
#define GetDataChannelInterface(obj) ((IDataChannel*)obj->GetInterface(DATACHANNEL_INTERFACE))
|
#define GetDataChannelInterface(obj) ((IDataChannel*)obj->GetInterface(DATACHANNEL_INTERFACE))
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//ッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッ
|
||||||
// Face-data channel interface
|
// Face-data channel interface
|
||||||
//
|
//
|
||||||
// This is an abstraction of a collection of data objects that is
|
// This is an abstraction of a collection of data objects that is
|
||||||
@@ -149,7 +149,7 @@ class IFaceDataChannel : public IDataChannel
|
|||||||
#define FACEDATACHANNEL_INTERFACE Interface_ID(0x181358d5, 0x3cab1bc9)
|
#define FACEDATACHANNEL_INTERFACE Interface_ID(0x181358d5, 0x3cab1bc9)
|
||||||
#define GetFaceDataChannelInterface(obj) ((IFaceDataChannel*)obj->GetInterface(FACEDATACHANNEL_INTERFACE))
|
#define GetFaceDataChannelInterface(obj) ((IFaceDataChannel*)obj->GetInterface(FACEDATACHANNEL_INTERFACE))
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//ッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッ
|
||||||
// Interface class that allows to execute a callback method (Proc) for all
|
// Interface class that allows to execute a callback method (Proc) for all
|
||||||
// face-data channels of an object.
|
// face-data channels of an object.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
// GUID that identifies this ifc (interface)
|
// GUID that identifies this ifc (interface)
|
||||||
#define FACEDATAMGR_INTERFACE Interface_ID(0x1b454148, 0x6a066927)
|
#define FACEDATAMGR_INTERFACE Interface_ID(0x1b454148, 0x6a066927)
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//ッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッ
|
||||||
// Interface for managing face-data channels.
|
// Interface for managing face-data channels.
|
||||||
// Objects that want to have face-data channels should implement this ifc
|
// Objects that want to have face-data channels should implement this ifc
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include "export.h"
|
#include "export.h"
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//ッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッ
|
||||||
// Face-data management implementation
|
// Face-data management implementation
|
||||||
//________________________________________________________________________
|
//________________________________________________________________________
|
||||||
class IFaceDataMgrImpl : public IFaceDataMgr
|
class IFaceDataMgrImpl : public IFaceDataMgr
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
// GUID that identifies this ifc (interface)
|
// GUID that identifies this ifc (interface)
|
||||||
#define PIPELINECLIENT_INTERFACE Interface_ID(0x62383d51, 0x2d0f7d6a)
|
#define PIPELINECLIENT_INTERFACE Interface_ID(0x62383d51, 0x2d0f7d6a)
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//ッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッッ
|
||||||
// This interface should be implemented by objects that flow up the
|
// This interface should be implemented by objects that flow up the
|
||||||
// geometry pipeline and have data members that belong to the pipeline
|
// geometry pipeline and have data members that belong to the pipeline
|
||||||
// channels (geometry, topology, texmap, etc)
|
// channels (geometry, topology, texmap, etc)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* BitMaps.h - MAX bitmap access classes
|
* BitMaps.h - MAX bitmap access classes
|
||||||
*
|
*
|
||||||
* Copyright © John Wainwright 1996
|
* Copyright © John Wainwright 1996
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* HashTable.h - HashTable class for MAXScript
|
* HashTable.h - HashTable class for MAXScript
|
||||||
*
|
*
|
||||||
* Copyright © John Wainwright 1996
|
* Copyright © John Wainwright 1996
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
* IVisualMSMgr - core interface to the VisualMS manager
|
* IVisualMSMgr - core interface to the VisualMS manager
|
||||||
* IVisualMSForm - interface to an existing form
|
* IVisualMSForm - interface to an existing form
|
||||||
*
|
*
|
||||||
* Copyright © Autodesk, Inc, 2000. John Wainwright.
|
* Copyright © Autodesk, Inc, 2000. John Wainwright.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MAXKeys.h - MAX controller keyframe access classes
|
* MAXKeys.h - MAX controller keyframe access classes
|
||||||
*
|
*
|
||||||
* Copyright © John Wainwright 1996
|
* Copyright © John Wainwright 1996
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MAXMaterials.h - MAX material & map wrapper classes
|
* MAXMaterials.h - MAX material & map wrapper classes
|
||||||
*
|
*
|
||||||
* Copyright © John Wainwright 1996
|
* Copyright © John Wainwright 1996
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MAXNURBS.h - MAX NURBS access classes
|
* MAXNURBS.h - MAX NURBS access classes
|
||||||
*
|
*
|
||||||
* Copyright © Autodesk, Inc. 1997
|
* Copyright © Autodesk, Inc. 1997
|
||||||
* Author: John Wainwright
|
* Author: John Wainwright
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MAXObject.h - MAX object wrapper classes in MAXScript
|
* MAXObject.h - MAX object wrapper classes in MAXScript
|
||||||
*
|
*
|
||||||
* Copyright © John Wainwright 1996
|
* Copyright © John Wainwright 1996
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MAX_commands.h - defines all the invocable MAX UI commands - for the 'max' scripter construct
|
* MAX_commands.h - defines all the invocable MAX UI commands - for the 'max' scripter construct
|
||||||
*
|
*
|
||||||
* Copyright © John Wainwright 1996
|
* Copyright © John Wainwright 1996
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MSCustAttrib.h - MAXScript scriptable custom attributes MAX objects
|
* MSCustAttrib.h - MAXScript scriptable custom attributes MAX objects
|
||||||
*
|
*
|
||||||
* Copyright © Autodesk, Inc, 2000. John Wainwright.
|
* Copyright © Autodesk, Inc, 2000. John Wainwright.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
* MSPluginClass instance from which info for the implementing
|
* MSPluginClass instance from which info for the implementing
|
||||||
* the standard ClassDesc2 interface is derived.
|
* the standard ClassDesc2 interface is derived.
|
||||||
*
|
*
|
||||||
* Copyright © Autodesk, Inc, 1998. John Wainwright.
|
* Copyright © Autodesk, Inc, 1998. John Wainwright.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MSZipPackage.h - MAXScript Zip Package file classes & utilities
|
* MSZipPackage.h - MAXScript Zip Package file classes & utilities
|
||||||
*
|
*
|
||||||
* Copyright © Autodesk, Inc, 2000. John Wainwright.
|
* Copyright © Autodesk, Inc, 2000. John Wainwright.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MSController.h - MAXScript scriptable controllers for MAX
|
* MSController.h - MAXScript scriptable controllers for MAX
|
||||||
*
|
*
|
||||||
* Copyright © John Wainwright 1996
|
* Copyright © John Wainwright 1996
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MAX_classes.h - class object for all the MAX built-in types
|
* MAX_classes.h - class object for all the MAX built-in types
|
||||||
*
|
*
|
||||||
* Copyright © John Wainwright 1996
|
* Copyright © John Wainwright 1996
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* working with meshes. Also provides access to MNMesh tools and
|
* working with meshes. Also provides access to MNMesh tools and
|
||||||
* mesh sub-objects as direct properties on nodes.
|
* mesh sub-objects as direct properties on nodes.
|
||||||
*
|
*
|
||||||
* Copyright © Autodesk, Inc., 1998
|
* Copyright © Autodesk, Inc., 1998
|
||||||
* John Wainwright
|
* John Wainwright
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MouseTool.h - scriptable mouse CommandModes for MAX
|
* MouseTool.h - scriptable mouse CommandModes for MAX
|
||||||
*
|
*
|
||||||
* Copyright © Autodesk, Inc, 1998. John Wainwright.
|
* Copyright © Autodesk, Inc, 1998. John Wainwright.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user