Network Sites: FPSguru.com RTSguru.com UnboundGamer.com
Login:  Password:   Remember?  
Show Quick Gamelist Jump to Random Game
Games:567  Guilds:2,961
Members:1,440,731  Online:0
Guests:0  Posts:4,573,523
Recent forum postsRSS
Active threads
Cloud view
List all forums
General Forums
Developers Corner General Discussion
Popular Game Forums
Click a status to find game forum
Game Forums
Click a letter to find game forum
D-F
D&D Online DC Universe DUST 514 Dance Groove Online Dark Age of Camelot Dark Ages Dark Legends Dark Orbit Dark Solstice Dark and Light DarkEden Online DarkSpace Darkfall Darkwind: War on Wheels Dawn of Fantasy Dawntide Dead Earth Dead Frontier Deco Online Defiance Deicide Online Dekaron Desert Operations Diablo 3 Diamonin Digimon Battle Dino Storm Disciple Divergence Divine Souls Dofus Dominus Online Dragon Ball Online Dragon Empires Dragon Nest Dragon Oath Dragon Raja Dragon's Call Dragon's Prophet DragonSky DragonSoul Dragona Dragonica Dream of Mirror Online Dreamland Online Dreamlords: The Reawakening Drift City Duels Dungeon Fighter Online Dungeon Overlord Dungeon Party Dungeon Runners Dynasty Warriors Online EIN (Epicus Incognitus) EVE Online Earth Eternal Earth and Beyond Earthrise Eden Eternal Elf Online Emil Chronicle Online Empire & State Empire Craft EmpireQuest Empires of Galldon End of Nations Endless Ages Endless Online Entropia Universe EpicDuel Erebus: Travia Reborn Eternal Lands Ether Fields Ether Saga Online Eudemons Online EuroGangster EverQuest Online Adventures Evernight Everquest Everquest II Evony Exarch Exorace Face of Mankind Fairyland Online Fall of Rome Fallen Earth Fallen Sword Fallout Online Fantage Fantasy Earth Zero Fantasy Realm Online Fantasy Tales Online Fantasy Worlds: Rhynn Faunasphere Faxion Online Ferentus Ferion Fiesta Online Final Fantasy XI Final Fantasy XIV Firefall Fists of Fu Florensia Flyff Football Manager Live Football Superstars Force of Arms Forsaken World Freaky Creatures Free Realms Freesky Online Freeworld Fung Wan Online Furcadia Fury Fusion Fall
T-Z
TERA TS Online Tabula Rasa Tactica Online Tales Runner Tales of Fantasy Tales of Pirates Tales of Pirates II Talisman Online Tank Ace Tantra Online Tatsumaki: Land at War Terra Militaris Terra World Thang Online The 4th Coming The Agency The Chronicle The Chronicles of Spellborn The Legend of Ares The Matrix Online The Missing Ink The Mummy Online The Myth of Soma The Realm Online The Repopulation The Secret World The Sims Online The Strategems There Thrones of Chaos Tibia Tibia Micro Edition Toontown Online Top Speed Torchlight Transformers Universe Travia Online Travian Trials of Ascension Tribal Wars Tribes Universe Trickster Online Troy Online True Fantasy Live Online Turf Battles Twelve Sky Twelve Sky 2 Twilight War U.B. Funkeys UFO Online Ultima Online Ultima X: Odyssey Ultimate Soccer Boss Uncharted Waters Online Undercover 2: Merc Wars Underlight Universe Online Valkyrie Sky Vanguard: Saga of Heroes Vanquish Space Vector City Racers Vendetta Online Victory - Age of Racing Vindictus Vis Gladius Voyage Century W.E.L.L. Online WAR (Warhammer Online) WYD Global Wakfu War Rock War of 2012 War of Angels War of Legends War of Thrones War of the Immortals WarFlow Warhammer 40K: Dark Millennium Online Warhammer Online: Wrath of Heroes Warrior Epic WebLords Wild West Online WildStar WindSlayer 2 Wish Wizard 101 Wizards and Champions Wonder King Wonderland Online World Golf Tour World War II Online World of Darkness World of Heroes World of Kung Fu World of Pirates World of Tanks World of Warcraft World of the Living Dead WorldAlpha Wurm Online Xiah Xsyon YS Online ZU Online Zentia Zero Online Zodiac Online eRepublik

MMORPG.com Discussion Forums

Darkfall

Darkfall 

General Discussion  » Any coding experts care to comment on DF movement code?

24 posts found
  Galadourn

Advanced Member

Joined: 2/06/08
Posts: 654

 
3/30/09 5:20:42 PM#1

According to this thread...it's terribly wrong.

 

Any experts here to make more clear?

  DarthRaiden

Apprentice Member

Joined: 11/20/05
Posts: 3978

i make art,
till someone dies.

Forum Terrorist

3/30/09 5:48:24 PM#2

LOL.."i write MMO's for living"

..and i don't approve da code  ..

 

Here you find proper reply

-----MY-TERMS-OF-USE--------------------------------------------------
$OE - eternal enemy of online gaming
-We finally WON !!!! 2011 $OE accepted that they have been fired 2005 by the playerbase and closed down ridiculous NGE !!

"There was suppression of speech and all kinds of things between disturbing and fascistic." Raph Koster (parted $OE)

  thinktank001

Apprentice Member

Joined: 12/13/08
Posts: 1122

3/30/09 6:07:24 PM#3
Originally posted by DarthRaiden

LOL.."i write MMO's for living"

..and i don't approve da code  ..

 

Here you find proper reply


 

Coder Lingo 101:

Design Decision-  A term used when a person(team) cannot solve a problem.

  DarthRaiden

Apprentice Member

Joined: 11/20/05
Posts: 3978

i make art,
till someone dies.

Forum Terrorist

3/30/09 6:09:57 PM#4

The problem cannot be solved it will exist in every client - server application. The handling will be different .. 

-----MY-TERMS-OF-USE--------------------------------------------------
$OE - eternal enemy of online gaming
-We finally WON !!!! 2011 $OE accepted that they have been fired 2005 by the playerbase and closed down ridiculous NGE !!

"There was suppression of speech and all kinds of things between disturbing and fascistic." Raph Koster (parted $OE)

  User Deleted
3/30/09 6:11:41 PM#5

I like how people who have never once even seen a snippet of Darkfall's coding try to comment on it, saying it's "wrong".....

  javac

Apprentice Member

Joined: 8/13/08
Posts: 1266

3/30/09 7:26:29 PM#6
Originally posted by DarthRaiden

Here you find proper reply

 

the linked poster above is correct.

 

in a nutshell:

when client<->server communication is interrupted, on the server side, you have 2 basic implementation choices: (1) allow the client (player) to continue along their last known course, or (2) treat the client as stopped or barely moving. DF does the latter, as do most FPSes. most MMOs do the former.

 

the problem with (2) is that to other people, the lagged out player just stops moving, which obviously sucks for them in combat. with (1), the player would just appear to continue moving in the same direction. examples of this in MMOs are, eg: someone disconnecting in a raid and ghosting into the boss/spawn up ahead, or DAOC "lag-casting".

 

the HUGE problem with (1) is that it's easy to exploit, by artificially making your client lag, which causes the server and other clients to see your character warping and rubberbanding all over the place. using (2), if you artificially try to lag your client, it's highly detrimental to you (because you just stand still -- easy target).

 

darkfall does it the best way, for its kind of gameplay (FPS). the OP in that post doesn't know what he's talking about. he's conflating lag with ping, when the 2 are handled very differently.

 

 

  User Deleted
3/31/09 9:36:22 AM#7

 

Movement prediction would not be a good thing for a game like this (Due to its combat nature), its best to leave it all on the server.

 

However, we do know that the server is the clients bitch in regards to movement and updates....or speedhacks wouldn't work.

The real problem is they implemented the server as the end all be all of movement (good) , however it doesn't seem to have any sanity checks (bad). Meaning the server accepts any data received as real.

Essentially, it's halfassed.

 

  robertb

Novice Member

Joined: 2/26/09
Posts: 676

3/31/09 9:41:55 AM#8
Originally posted by Mrbloodworth

 

Movement prediction would not be a good thing for a game like this (Due to its combat nature), its best to leave it all on the server.

 

However, we do know that the server is the clients bitch in regards to movement and updates....or speedhacks wouldn't work.

The real problem is they implemented the server as the end all be all of movement (good) , however it doesn't seem to have any sanity checks (bad). Meaning the server accepts any data received as real.

Essentially, it's halfassed.

 

 

I have seen speed hacks in most of the online games I have played, at one time or another. As this is the case, do all MMO's rely on similar architecture?

  User Deleted
3/31/09 9:47:44 AM#9
Originally posted by robertb
Originally posted by Mrbloodworth

 

Movement prediction would not be a good thing for a game like this (Due to its combat nature), its best to leave it all on the server.

 

However, we do know that the server is the clients bitch in regards to movement and updates....or speedhacks wouldn't work.

The real problem is they implemented the server as the end all be all of movement (good) , however it doesn't seem to have any sanity checks (bad). Meaning the server accepts any data received as real.

Essentially, it's halfassed.

 

 

I have seen speed hacks in most of the online games I have played, at one time or another. As this is the case, do all MMO's rely on similar architecture?

No, they don't, and speed hacks come in different flavors. Its more of a case of "How easy did you just make it for people to spoof the server or create speed/movement hacks".

Its all data, and all data can be manipulated, its a question of ease.

And no, i have not seen any of darkfalls code, im am purely speculating here. I am giving them the benefit of the doubt that they did not leave the client to report movement..... Even if i see things that give me pause to the contrary. Pun intended.

 

  javac

Apprentice Member

Joined: 8/13/08
Posts: 1266

3/31/09 10:47:22 AM#10
Originally posted by robertb

I have seen speed hacks in most of the online games I have played, at one time or another. As this is the case, do all MMO's rely on similar architecture?

 

all network games (not just MMOs) use the same basic principle of the server streaming information to the client, which the client then renders. in all modern games, the server dictates everything, essentially because the information the client sends cannot be trusted not to be manipulated. there are, however, various thorny issues with how network lag is handled, accordingly most network games use varying degrees of client side prediction (read: guesswork) when the stream of info between client & server are interrupted (due to lag/packetloss/disconnection).

 

deliberate manipulation of this network stream can produce various in-game effects, such as what we might call speedhacking, rubberbanding, etc (alternatively, speedhacks and the like may arise from exploitation of a plain old boring bug in the network stack - won't go into this here).

 

there is basically no real way of preventing this kind of abuse, without impacting performance in a big way. similarly, all client/server programs (not just games) are susceptible to other programs intercepting and manipulating the data stream between client/server, by the very nature of the client/server setup. as you said, the proof is in the pudding: basically every network game out there has speedhacks and/or aimbots.

 

lastly, it may simply not be possible to implement certain kinds of games without offloading *some* of the game logic onto the client, which obviously means introducing the potential for cheats. course, there is the possibility of doing thing like on the fly encryption/decryption of packets between client/server but the potential for figuring out a cheat is always going to be there.

 

 

  Rekindle

Apprentice Member

Joined: 3/03/05
Posts: 1121

3/31/09 12:28:43 PM#11
Originally posted by Mrbloodworth

 

Essentially, it's halfassed.

 


 

Like many, many aspects of this game from the UI to the (lack of) real content.

  pprllo

Novice Member

Joined: 6/10/07
Posts: 106

3/31/09 1:56:58 PM#12

I think it's quite crystal clear that 100% of the movement is handled client-side without sanity checks. That's probably for the sake of performance, because this kind of system is probably the fastest one.

In other words, they're NOT using time based movement at all, they're using another system (simpler & faster & less precise, if you wish).

 

With such an architecture, implementing the system the OP is talking about would be very hard and taxing performance-wise.

 

  tombear81

Novice Member

Joined: 3/17/07
Posts: 814

"Meeza spullon and gramma is ou me ma taut me. Yousa no write be nasta to ma speelin n a grumma !"

3/31/09 4:47:20 PM#13
Originally posted by javac 

the HUGE problem with (1) is that it's easy to exploit, by artificially making your client lag, [..]

 

Oh dear !...  me  and javac agree on something. I have seen this problem in quake wars where attempts are made "average"  out latency. I have seen plenty of players almost unhittable and jerkily moving due there deliberate gimping of their connection. Of course on decent servers they get banned quickly. With regard to DF we don't know what the source code is like as we cannot see it.

 

However just to disagree with Javac (!) the combat is still too rudimentry and basic for my and many more refined FPS players tastes. Certainly not M&B like. At best the code is probably a very generic solution. No technological marvel here I am afriad. Very simple combat  actions/options so you can have much more people on screen. No real boundary has been broken. I can understand the pro and cons of various techinques and limitations but I cannot understand why DF combat is marked as revolutionary when it is simply not. it is simply 100 odd people (if that) running around and hitting left mouse button and right occasionally with little sequencing or fluidity or directional attacks/blocks. 

To put it another way AV won't be selling this piece of DF on as Tasos reuseable technology speech which he gave to attract funders. It is simply so so... 

  User Deleted
3/31/09 5:10:29 PM#14

Okay you will flame me but I will state something here, it harkens back to the days of yor, when rocks were soft and dirt was young and there was this game called EverQuest. The GM's there decided in the vasty world of pvp they would do something new and interesting, they would not make people that lagged out keep moving, or stop, if they were in combat. Nope if you smacked a lagged out person that person became one bad #%# npc that handed you your #$% without mercy and also handed the same #$% to anyone else that hit them. Call it what you will but short sighted codeing be short sighted codeing. If EQ did that some three to four years ago, they should be able to as well.

  jimmyman99

Novice Member

Joined: 6/07/04
Posts: 3222

"Damn you, poetical justice" - Homer Simpson

3/31/09 5:55:43 PM#15
Originally posted by javac
Originally posted by DarthRaiden

Here you find proper reply

 

the linked poster above is correct.

 

in a nutshell:

when client<->server communication is interrupted, on the server side, you have 2 basic implementation choices: (1) allow the client (player) to continue along their last known course, or (2) treat the client as stopped or barely moving. DF does the latter, as do most FPSes. most MMOs do the former.

 

the problem with (2) is that to other people, the lagged out player just stops moving, which obviously sucks for them in combat. with (1), the player would just appear to continue moving in the same direction. examples of this in MMOs are, eg: someone disconnecting in a raid and ghosting into the boss/spawn up ahead, or DAOC "lag-casting".

 

the HUGE problem with (1) is that it's easy to exploit, by artificially making your client lag, which causes the server and other clients to see your character warping and rubberbanding all over the place. using (2), if you artificially try to lag your client, it's highly detrimental to you (because you just stand still -- easy target).

 

darkfall does it the best way, for its kind of gameplay (FPS). the OP in that post doesn't know what he's talking about. he's conflating lag with ping, when the 2 are handled very differently.

 

 

No, if you artificially generate lag in scenario 1, then you will warp on client side, since the server will update your correct position to the client when its connection re-establishes. The only difference is in 1) as you mentioned you will just keep doing the last action server recorded (EQ1 style: moving forward into lava pools, rotating around your axis, etc) and in 2) you will just stop. Why would client data be preferred over server data? It makes no sense.

I am the type of player where I like to do everything and anything from time to time.

http://en.wikipedia.org/wiki/Holodomor - pre-WW2 genocide.

  javac

Apprentice Member

Joined: 8/13/08
Posts: 1266

3/31/09 9:07:22 PM#16
Originally posted by jimmyman99
Originally posted by javac
Originally posted by DarthRaiden

Here you find proper reply

 

the linked poster above is correct.

 

in a nutshell:

when client<->server communication is interrupted, on the server side, you have 2 basic implementation choices: (1) allow the client (player) to continue along their last known course, or (2) treat the client as stopped or barely moving. DF does the latter, as do most FPSes. most MMOs do the former.

 

the problem with (2) is that to other people, the lagged out player just stops moving, which obviously sucks for them in combat. with (1), the player would just appear to continue moving in the same direction. examples of this in MMOs are, eg: someone disconnecting in a raid and ghosting into the boss/spawn up ahead, or DAOC "lag-casting".

 

the HUGE problem with (1) is that it's easy to exploit, by artificially making your client lag, which causes the server and other clients to see your character warping and rubberbanding all over the place. using (2), if you artificially try to lag your client, it's highly detrimental to you (because you just stand still -- easy target).

 

darkfall does it the best way, for its kind of gameplay (FPS). the OP in that post doesn't know what he's talking about. he's conflating lag with ping, when the 2 are handled very differently.

 

 

No, if you artificially generate lag in scenario 1, then you will warp on client side, since the server will update your correct position to the client when its connection re-establishes. The only difference is in 1) as you mentioned you will just keep doing the last action server recorded (EQ1 style: moving forward into lava pools, rotating around your axis, etc) and in 2) you will just stop. Why would client data be preferred over server data? It makes no sense.

 

there is usually some resyncing of where the client & server think you should be, since while packets were lost, the server was only guessing what you *might* have been doing were packets not lost.

 

in any case it's clear DF doesn't do movement on the client.

  tombear81

Novice Member

Joined: 3/17/07
Posts: 814

"Meeza spullon and gramma is ou me ma taut me. Yousa no write be nasta to ma speelin n a grumma !"

4/01/09 1:18:11 PM#17
Originally posted by javac
Originally posted by jimmyman99
Originally posted by javac
Originally posted by DarthRaiden

Here you find proper reply

 

the linked poster above is correct.

 

in a nutshell:

when client<->server communication is interrupted, on the server side, you have 2 basic implementation choices: (1) allow the client (player) to continue along their last known course, or (2) treat the client as stopped or barely moving. DF does the latter, as do most FPSes. most MMOs do the former.

 

the problem with (2) is that to other people, the lagged out player just stops moving, which obviously sucks for them in combat. with (1), the player would just appear to continue moving in the same direction. examples of this in MMOs are, eg: someone disconnecting in a raid and ghosting into the boss/spawn up ahead, or DAOC "lag-casting".

 

the HUGE problem with (1) is that it's easy to exploit, by artificially making your client lag, which causes the server and other clients to see your character warping and rubberbanding all over the place. using (2), if you artificially try to lag your client, it's highly detrimental to you (because you just stand still -- easy target).

 

darkfall does it the best way, for its kind of gameplay (FPS). the OP in that post doesn't know what he's talking about. he's conflating lag with ping, when the 2 are handled very differently.

 

 

No, if you artificially generate lag in scenario 1, then you will warp on client side, since the server will update your correct position to the client when its connection re-establishes. The only difference is in 1) as you mentioned you will just keep doing the last action server recorded (EQ1 style: moving forward into lava pools, rotating around your axis, etc) and in 2) you will just stop. Why would client data be preferred over server data? It makes no sense.

 

there is usually some resyncing of where the client & server think you should be, since while packets were lost, the server was only guessing what you *might* have been doing were packets not lost.

 

in any case it's clear DF doesn't do movement on the client.

 

Thought a quick glance of you tube shows some wonderful speed hacks with no rubber banding or latency effects you would normally see. I think the speed of the movement may actually be .. client side?

Come on Javac post some links to you tube vids of hacks and discuss with comparison to other speed hacks in other games:)

  jimmyman99

Novice Member

Joined: 6/07/04
Posts: 3222

"Damn you, poetical justice" - Homer Simpson

4/01/09 3:29:38 PM#18
Originally posted by tombear81

Thought a quick glance of you tube shows some wonderful speed hacks with no rubber banding or latency effects you would normally see. I think the speed of the movement may actually be .. client side?

Come on Javac post some links to you tube vids of hacks and discuss with comparison to other speed hacks in other games:)

 

I think you are right. If client movements were processed on server, then there would be no speedhacking, since the server adjusts your location. If this work is done on client side, though, then the client can be "hacked" and simply update server with movement distances 10 times more then usual.

If that is the case, wouldn't there be some checks whether client reports abnormal movement (after compensating for sprinting/riding)? I've done some work with client/server communications, but never in a game, so maybe I am missing something?

I am the type of player where I like to do everything and anything from time to time.

http://en.wikipedia.org/wiki/Holodomor - pre-WW2 genocide.

  pprllo

Novice Member

Joined: 6/10/07
Posts: 106

4/01/09 3:48:46 PM#19
Originally posted by javac

there is usually some resyncing of where the client & server think you should be, since while packets were lost, the server was only guessing what you *might* have been doing were packets not lost

in any case it's clear DF doesn't do movement on the client.

Actually the opposite is quite clear. The movement is quite clearly almost completely client side, and I'm willing to bet that the client sends <X, Y> packets to the server, rather than <DeltaX, DeltaY> packets.
 

IMHO they did not even implement sanity checks.

I think the only serverside movement-related feature is collision detection (there are no pass-through-walls hacks as of now AFAIK).

  PapaB34R

Advanced Member

Joined: 11/15/04
Posts: 303

Never lose your way, or someone else might find it

4/01/09 4:00:40 PM#20
Originally posted by Galadourn

According to this thread...it's terribly wrong.

 

Any experts here to make more clear?

 

is this an 1april joke or is it really that bad?

  Nyast

Novice Member

Joined: 10/13/05
Posts: 84

4/01/09 6:26:31 PM#21

I can't comment on Darkfall since I haven't played it, but here's a professional programmer point of view on the code that has been posted: it's horrible.

The OP criticizes the non-existing use of elapsed time in the client and posts pseudo-code to show how it's supposed to be. The only problem is that none of the time variables set in "UpdateTime" are used in his "Agent_Move" function, so really, either he seriously typo-ed his code, either he doesn't know what he's talking about.

  PapaB34R

Advanced Member

Joined: 11/15/04
Posts: 303

Never lose your way, or someone else might find it

4/01/09 8:08:41 PM#22
Originally posted by Rytif

 

Quoted by the Darkfall Forum:

==========================================================================================

public static void UpdateTime()
{
// you do this to actually get the time that's elapsed for example using the api calls for QueryPerformanceCounter
QueryPerformanceCounter(out m_lCurrentTime);

m_fElapsedTime = (float)((double)(m_lCurrentTime - m_lLastTime) / (double)m_lTimerFrequency);
m_dTime += m_fElapsedTime;
m_lLastTime = m_lCurrentTime;
}
So when you would account for movement it would be something like:

public void Agent_Move()
{
Vector3 ActorDir = Vector3.Normalize(Vector3.Subtract(new Vector3(_AgentGointToPosition.x, _AgentGointToPosition.y, _AgentGointToPosition.z), new Vector3(_AgentPosition.x, _AgentPosition.y, _AgentPosition.z)));
Vector3 ActorPosition = Vector3.Add(new Vector3(_AgentPosition.x, _AgentPosition.y, _AgentPosition.z), Vector3.Scale(ActorDir, _AgentCurrentSpeed));
_AgentLastGoodPosition = _AgentPosition;
_AgentPosition = new TV_3DVECTOR(ActorPosition.X,ActorPositio n.Y,ActorP osition.Z);//new TV_3DVECTOR(ActorPosition.X, World.Landscape.GetHeight(ActorPosition. X, ActorPosition.Z), ActorPosition.Z);
//_AgentPosition = slide(_AgentLastGoodPosition, _AgentPosition);
_AgentPosition = Agent_Collide(_AgentLastGoodPosition, _AgentPosition);
Agent_SetLookAt(new TV_3DVECTOR(_AgentGointToPosition.x, _AgentPosition.y, _AgentGointToPosition.z));
if (_AgentOwnerStyle == AgentOwnerEnum.Mesh)
World.MeshManager.Mesh[_AgentOwnerName].Position = _AgentPosition;
else
World.ActorManager.Actors[_AgentOwnerName].Position = _AgentPosition;
}
=============================================================================================

 /end qoute

 

BLAHAHAHAHAHA! That code was exactly copied from Truevision3D.com and was qouted to describe to the developers on how to program their engine. It was also insisted by the other DFers to hire this individual because he'll create better code.... that is not his nor from a custom engine... mind you I'm positive it's also not c++ (it's C#). It goes to show that there is nothing but script kiddies over there in that community.

It's just so basic and has absolutely no indication of network movement (dead walking?)... because it was from a Truevision3D tutorial.. blahahaha!

 

I dont know much bout program languages but I thought dot net have taken over c++?

  ianubisi

Novice Member

Joined: 11/28/03
Posts: 4219

E: 86% A: 60%
S: 46% K: 6%

4/01/09 10:01:54 PM#23


Originally posted by PapaB34R
I dont know much bout program languages but I thought dot net have taken over c++?

If by "dot net" you mean C#, then the answer is no. Utility programs can be written in a managed code base like C#. But if you want high degrees of efficiency it is usually better to use an unmanaged code base like C++ to ensure better access directly to machine instructions.

  slippyC

Apprentice Member

Joined: 1/14/04
Posts: 397

4/01/09 10:14:17 PM#24

There is a hell of alot of stuff you just can't do in .NET either.   Well some of that could, but by the time you wrote the code to do what you wanted it would be a total waste of time.  You would be better off writing a dll and accessing some stuff that way.

The thing that really pisses me off about .NET is technologies that came out after .NET was established, you still have to do in C/C++.  It is like Microsoft only supports their framework when it is convenient for them.