CoCSharp - a C# Port/Rewrite

JustSomeGuy65535

New Member
Oct 22, 2019
1
1
34
With the death of Flash coming about, I was interested in seeing how this would be kept alive, as it were. I'd occasionally view things here but never really comment. IIRC, there was talk of ports to various languages, but there was divide on what to do, if anything at all - some people wanted a type-safe variation (and after seeing the source code, I understand why), and someone mentioned C#. So I figured, what the hell, i'll do some in my free time. Fast Forward ~9 months, and I've got the majority of the framework in place - enough to demo it and see if anyone wants to help finish it. Odds are I'll eventually complete it, but it'll be much faster with help. Right now you can demo the basic character creation, though anything beyond the initial exploration will throw a NotImplementedException (or my own version of it, InDevelopmentExceptionThatBreaksOnRelease. I use that so it won't compile when I try to build to Release, otherwise, I might accidently leave in something that hasn't been implemented. )

It's available for download (source) here https://github.com/JustSomeGuy6561/CoCSharp
I Can also email or place a zipped version of the application on dropbox/drive if desired; it's too big to upload here. Note that the executable would be the active build, complete will all the errors i'm still fixing.

A few quick notes: The code base is designed to be modular, and with separation of concerns in mind. That's just fancy dev talk for code that 'minds its own business.' So, there's a framework layer, that implements the base classes for everything and runs the engine, a content layer, where all the content goes, and a GUI layer, that displays the content.
This design allows us to simply plug and play with different GUI's - modifying the base code won't have any effect on the GUI code, and modifying the GUI won't force us to recompile everything else.
It's been designed with Language Support in mind - I know that something with this much text would likely be hell to translate, but I figured since I was already rewriting the whole thing, I might as well add that in. Basically, every string in the Backend is actually a Function that returns a string, so it's possible to return different strings if the current language changes.
I've added event support in, so it's possible to have things react to the player's actions, not manually check for everything all the time. For context: my 'event parser' equivalent is ~500 lines (with comments), while the original is ~10x that.
C# is statically typed, so we've lost some anonymous class conversions, but it's much more understandable, so i'll accept that tradeoff. Also, I can't call the base constructor (super in AS3) after doing the local constructor, which causes no small amount of headaches when porting (and as a result i often just end up creating an abstract method instead of requiring a callback in the constructor)

Some functions have been renamed for clarity. The project leans heavily into both event-based design (because it has to) and Object-Oriented Design (because it's C# and I'm biased toward it). There are some things base classes need or helpful aliases I have not yet implemented because I have yet to need them. There are also likely some dumb design decisions I have made that require explanation and/or rewrite, so feel free to chip in as needed.

As for functionality: Everything but Combat and Saves are currently in place - it's now just a massive slog of converting all the old content into their c# counterparts. Also worth noting is that event reactions to time passing or whatever are basically mini-scenes now, so events that result in the player getting an item don't require any strange workarounds.

Also, I'll join the Discord once I figure out how to do so and not get banned because I have no idea what i'm doing lol.
 
Last edited:
  • Like
Reactions: ShySquare