Question: Should the graphics (sprites) for this game be...
Option 1: Multiple 2D images, at various angles?
Option 2: 16x8x16 3D sprites with a viewing algorithm adapted for it?
Option 3: Other suggestion (post in topic)
I've been talking about it for a while. Asking questions about how to do this or that. But without any real progress.
Scroll down for a question I have about ship/terrain assets.
Well as of the past week or so, that has changed. I sat down, turned off my Minecraft (with great internal suffering) and got to work. Over the past week, I succeeded in creating the shields, the major non-combat systems, damage reception, power control, and more.
At this point in time, there is no networking implemented and the file is quite large (~15kb). Much of this is due to graphics and AI calculations which, when networking is implemented will no longer be present. The intent is also to hold graphics server-side and send the relevant sprites to the calc during runtime, which will be saved in a temporary assets file. Also, as Kerm told me that CALCnet will likely not be a thing for the CE due to differences in network protocol, I'll probably use the existing USB protocol on the CE with a computer side program to send data to the hub, which would have the ability to interact with connected CE's and CALCnet, allowing the color and monochromes to play on one server. I'll also open source this when done to allow it to be ported to the CSE.
But more on that later. I have very little left to do before I can release a demo. Basically just AI ship control, player ship control, rendering the viewscreen, and firing. In the scope of what I've done already, that shouldn't take too long.
Now, feast your eyes on some screenshots:
This game is played in a virtual 3D world. The map objects and ships are technically 3D. My question is, would it be better, both in terms of rendering speed and data size, to create several versions of each sprite, to view the object from different angles, or to create full 3D models for the ships and the spherical map objects (the irregular objects will be rendered differently). For full 3D, I could make 16x16x16 models for each item, leading to an overhead of 4096 bytes per object, which if it's in an external assets file on the CE isn't a major issue. When this game eventually gets backwards-ported to the monochrome calcs, we'd be talking about 512 bytes per object.
If the common consensus is the latter (3d models), is there someone here who has experience making them?
Awesome idea, looks complex.
I personally care more for speed than graphics,
so 2-d would be nice. I'm guessing it would look like
Turn and Burn for the Gameboy.
You can make "polls" for voting when you're making a thread.
I think you can add them later too.
Thanks. Poll added!
That looks nice. It didn't look as great on Messenger because it cropped the borders but with the full-view of the screenshots it looks better. I like the layout as well. Good to see you're adding some graphics or icons, though.
As for graphics, I would be ok with 2D sprites with no 3D effect. You don't have to add 360 frames for each angle or something lol
This looks awesome!!! :thumbsup: :thumbsup: :thumbsup:
Ranman must go buy a CE now.
I vote for using 2D sprites for the ships and objects. :)
Thanks for the comments guys. Gotten a bit more progress done.
This is the Weapons Control system. Here you can see what weapon class and type are equipped, their damage rating, shield and hull efficiency, module power setting, module health, and eventually the name of the entity or player the module is currently targetting (via targetting sensors). You'll be limited to 3 weapons modules. An unset module simply doesn't show up, and an offline module shows up red.
And a slight modification to the Mains system status panel. There's now an online/offline indicator, and pressing Mode with a module highlighted toggles that.
v0.0.18-pre __ Saving Ship/Player data officially added __
An alpha demo is almost here. Got pretty much all the basic combat systems complete. Just have to add in phaser/torpedo sprites, rendering, and target tracking. Then work out any bugs in the firing/movement/rendering system. Here's an image with the demo opponent, a Borg sphere, rendered on screen.
I need help debugging my rendering routine. Anyone fairly experienced with C and rendering who can take a look at my code?
or @Lionel Debroux
might know but I don't remember if they still do CE C.
I've never actually written any 3D rendering code myself, so I probably can't help on that part, but maybe general opts.
Is the code hosted somewhere like GitHub ?
So... I finally got this up and running on my calc and CEmu.
Is this an original idea or are you trying to remake a game that already exists. If the latter, can you provide a link as to what this should look like in action?
Looks pretty good so far. I see the issues with rendering you were talking about.
Now... i finally may be able to help.
I was unable to install the Atlassian Sourctree on my WinXP platform as it doesn't support WinXP -- go figure. So im a bit at a disadvantage. Trying to rectify. I finally downloaded Win10; but before I install it, I wanted to get a SSD and a memory upgrade from 4GB to 8GB. That should be done by Wednesday of this week.
It would be nice to have some game play on video.
Just for archive reasons.
Hey guys. Sorry for the delay in updates.
As of now, rendering has improved substantially. Scaling is fixed, as is half of Field of Vision. Sprites now also clip to the viewscreen.
What is remaining are the following two bugs:
1) Your ship starts at an XZ angle of 0 and a Y angle of 0, a vector of 0,0. The other ship is in the viewscreen, at an angle of 3 degrees on the XZ and 0 on the Y. It appears onscreen. If I rotate my ship to the right (angle values increasing), the other ship moves off to the left as it should. However if I move off to the left (decreasing), once the XZ angle for the viewer drops to 0 and then loops to 255, it registers a difference of 252 degrees in the angles, and thus the enemy ship vanishes, despite actually still being 4 degrees away. I've added this code:
if( diffXZ > 128 ) diffXZ = 256 - diffXZ; In an attempt to rectify this, to no avail. Link to code for that here: https://pastebin.com/9sAPE4HW
2) My entity tracking algorithms seem to not work properly. Projectiles do not appear to track their targets, nor does the AI seem to track the player, and since they both use the same AI subroutines, it would make sense. I DO need #1 fixed before I can resolve this tho.
As far as video footage, there are some animated screenshots on my project page: http://clrhome.org/startrek/ (http://clrhome.org/startrek/)'s gallery tab. There is no full gameplay footage yet, as the game isn't stable enough for that yet.
As far as what this is based off of.... there is a Gameboy Star Trek TNG game that was the inspiration for the LCARS interface and rendering system and sensor dialogs I will be using. As far as other calculator games go, tifreak has plans to make a singleplayer Star Trek game, though he's still learning C and he has access to this repository as well to see some code in action. THIS particular game, while the demo's will initially be singleplayer demos, eventually PvP between two calculators will be introduced as a precursor to networking via the CE's USB port, with an eventual backwards compatibility for CALCnet (at which point I'll open source this for porting to the monochrome calculators), using a CALCnet hub. This will allow older z80's to connect, and I'll probably have to write (or outsource the writing of) some sort of computer script to convert the CALCnet stuff into stuff the CE can read over USB. I might ask Kerm Martian if I can take a gander at his Direct USB stuff at that point.
Okay, this is pretty much the coolest thing i have ever seen! I can test stuff :3
Field of Vision issue resolved.
Remaining things to do before demo: Fine tune where things show up on screen (x,y coords), and how I map the FOV to the screen over varying scales; Resolve bugged entity tracking algorithm; Remove flicker in LCARS interfaces.
After a bit of not understanding double buffering and then finally understanding the concepts, I figured it out, and created fairly smooth graphics rather than flickering mayhem. I implemented this only for the view screen, since it should be like you looking out a window. For the other tabs, which are LCARS displays, I left the faint flickers in, since I would think a refreshing LCARS display would have a quick flicker.
Here is a screenshot showing the Borg cube with the new graphics.
A few more things to do (Bugs):
1. Implement a shunting yard or some other form of algorithm that sorts rendered map objects by distance, so we can render them in order. (help, please?!)
2. Projectile tracking not working. (reviewing)
----- 2-a. Projectiles do not track their targets.
----- 2-b. Sometimes, pressing the fire key fires a phaser, other times it seems not to.
3. The Borg sphere not AI'ing.
----- 3-a. The Borg sphere does not seem to track the player
----- 3-b. The Borg sphere does not seem to fire as its supposed to. This is likely the same bug as 2-b.
4. The collision detection and collision interpolation algorithms might need some work
** If anyone is willing to assist me in debugging, let me know!
I'm hoping for a release by Christmas.
I can't see the screenshot D:. Is it the same as the one you showed me yesterday?
Quote from: ACagliano on November 19, 2017, 10:26:12 PM
For full 3D, I could make 16x16x16 models for each item, leading to an overhead of 4096 bytes per object,
ehh this isnt how you should be storing 3D models. 3D models are stored as a a bunch or vertices and faces made from those vertices. ;)
Quote from: c4ooo on December 19, 2017, 04:55:07 PM
Quote from: ACagliano on November 19, 2017, 10:26:12 PMehh this isnt how you should be storing 3D models. 3D models are stored as a a bunch or vertices and faces made from those vertices. ;)
For full 3D, I could make 16x16x16 models for each item, leading to an overhead of 4096 bytes per object,
oh. Can you give me an example? Would this require more or less a) memory and b) processing power to use than a series of sprites of ships from various angles?
Quote from: ACagliano on December 19, 2017, 05:42:57 PM
Quote from: c4ooo on December 19, 2017, 04:55:07 PMoh. Can you give me an example? Would this require more or less a) memory and b) processing power to use than a series of sprites of ships from various angles?
Quote from: ACagliano on November 19, 2017, 10:26:12 PMehh this isnt how you should be storing 3D models. 3D models are stored as a a bunch or vertices and faces made from those vertices. ;)
For full 3D, I could make 16x16x16 models for each item, leading to an overhead of 4096 bytes per object,
What you are describing with "16x16x16 models for each item, leading to an overhead of 4096 bytes per object" seems to be a voxel engine, which are not exactly the fastest or best looking (ahem ahem minecraft).
Here is an example of how 99.99% of 3D games store their models:
v 0.0 0.0 0.0
v 0.0 0.0 1.0
v 0.0 1.0 0.0
v 0.0 1.0 1.0
v 1.0 0.0 0.0
v 1.0 0.0 1.0
v 1.0 1.0 0.0
v 1.0 1.0 1.0
f 1 7 5
f 1 3 7
f 1 4 3
f 1 2 4
f 3 8 7
f 3 4 8
f 5 7 8
f 5 8 6
f 1 5 6
f 1 6 2
f 2 6 8
f 2 8 4
(This is a cube). ( and of course you want to store this as raw data, not as text). If you want to have a texture applied, you have to also store texture coordinates.
As to the question of "Would this require more or less a) memory and b) processing power to use than a series of sprites of ships from various angles?", well, i really dont know. The "sprites of ships from various angles" method will probably give you better results of far away objects, where as 3D models would be better in up-close ship to ship dog-fighting. Since the game seems more of the former then the latter, i would go with the "sprites of ships from various angles" method. You could probably make and texture the models in blender, then render them from different angles. You might also want to take a look at TheM02's 3D engine for the CE.
Yea, that 3D engine is definately something I want to use. It seems to look beautiful, but im not entirely sure it would be compatible with my map format.
Ok so I need some advice.
The Problem: When I'm rendering the weapon sprites, the weapons should seem to move from lower on the screen, and then move towards the center, and the ship. I thought of drawing triangles (gfx_FillTriange) to create a perspective beam phaser effect, but that's very hard to control with the degree I need to. I'd need to be able to calculate the starting point and ending point of the phaser beam and draw a line or series of lines. The starting and ending point may not always be on screen, especially when the game goes multiplayer and you'll sometimes see a phaser fly across your viewscreen, heading elsewhere. This seems to not be a problem with the torpedo sprites, as torpedoes are more in one place than beam-like.
The resolution: I could give every phaser a *trail length* value that's like some % of the weapon's speed. For each phaser, we calculate the phaser's position and the trail's ending position, draw the phaser in position, and then draw a line or triangle from the phaser to the trail end. GregsAStar also suggested stretching the phaser's sprite out so that it goes from the phaser's position to the trail's end.
Does anyone have any other suggestions?
Would I be able to recruit some debugging assistance? I've gotten this game mostly debugged, but I'm still struggling with two remaining issues that I can't seem to remove.
UPDATE -- 0.50 alpha-ish
Ok, update time!!
This game took a bit of a hiatus, as many of my projects do from time to time because of real life, skill building, and other stuff.
However, I did some code reorganization at the start of the summer, then set out on an endeavor to have a working demo of basic combat (single player) by the end of the summer.
Attached is the current pre-demo release. This version is functional but has no AI or rendering engine yet. That is what I'm working on now... 3d rendering, weapons and targeting, then wrapping everything up, optimizing, and releasing. That being said, I'll talk about some of the cool features already implemented:
1. Ship Status Icon
At the lower, left side of the screen there is an icon that shows your ship and your shields. As your ship takes damage, you'll notice the shields first. They start off electric blue, then degrade to yellow, then to red. Additionally, within the ship itself, which is normally grey, sections of the ship will turn red as systems are damaged. Hull integrity causes a small filled red circle when it reaches <50% in the saucer that gets larger when hull integrity fails. In addition to that, the nacelles turn red when the warp drive is below 50%, the aft of the ship turns red when impulse, life support, or the warp core fall below 50%. As of now, this icon is locked to an Enterprise-ish shape, as are the indicators. If/when I allow icons to be customized, I'll have to modify this to match.
2. Warp Core Failure
When the warp core system is damaged to less than 25% health, the program begins attempting to trigger a warp core breach. The odds of a core breach are 1 / system health * 10. So, for a warp core at 24% health, the odds of a breach occurring are 1/240. If the warp core is at 10% health, the odds become 1/100. Once a breach is successfully trigged, a timer begins. You get 1000 game cycles to avert the breach or your ship is destroyed. I have yet to clock how long that actually is. You can avert the breach by (1) Repairing the warp core to above 50% health (see Repair), or (2) Pressing the [Del] key to eject the warp core. The ejection occurs and spawns a critical warp core behind your ship, on a slow trajectory moving backwards (relative to you). Doing so immediately stops all power flow to your ship, meaning if you have no auxiliary power module installed or no warp core to refill the slot with, you'll lose power fast! The counter continues from whatever it was at when you ejected it, and then explodes in a MASSIVE detonation that can significantly damage your ship if you're too close.
3. Power, Inventory, Core Breach, Life Support Alerts
When any one of these four things need attention, there is an alert dedicated to them. The power icon appears when any module is unable to fulfill its power requirements, meaning that your power generation is no longer effective enough to keep your ship powered. This means that it is time to (1) Bring unessential systems offline, (2) Repair your warp core (the health of your core determines your ship's power output), or (3) Switch to an auxiliary power module (if installed).
The Inventory status alert appears when an active torpedo module has exhausted it's supply of selected torpedoes (unimplemented).
The core breach alert appears when a warp core breach has been triggered, and will disappear if the core is repaired or ejected.
The life support alert appears when the life support system hits 0% health or is turned offline. If life support is not repaired and brought back online within 2000 game cycles, your crew dies and you lose.
4. Repairing Your Ship
Any module may be repaired, including shields and hull integrity. Repairing a module stops it from being supplied power, stops it from functioning, and expends a lot of power to repair it. Every 5 game cycles, the module draws its current power default and gives itself 1 unit of health. For a starting ship, this means that it takes a module 250 game cycles to fully repair to 50 health, and costs 250 power to do so.
* A repairing module is treated as OFFLINE. This means that if you are repairing your shields, they will not function. If you're repairing your hull integrity, it will not give you extra damage protection. If you are repairing your warp core, it will stop generating power. The only modules that will function while being repaired are your engines (warp drive/impulse) and your weapon systems.*
5. Damage Calculation
Damage in game occurs as two factors: shield damage and hull damage. Phasers or other energy weapons deal more damage to your shields than to your hull, while torpedoes will deal more damage to your hull than your shields. Notable exceptions will be the Narada torpedoes that will deal staggering damage regardless and disruptor phasers, which will be somewhat balanced against both.
First, the current health and current power configuration of your shields are calculated and multiplied by the shield's damage resistance value. This is the amount of damage that your shield is capable of repelling at 100% health and 100% power. To start, this number is 5. Most weapons you'll encounter at first will deal 1-3 damage. If your shields are at, for example, 60% health, they will be capable of blocking only 3 damage. If you were to then set your shields to use 200% power, they would become able to block 6 damage. In this way, you can boost your systems to help you out in combat, but at a cost (see Boosting).
The shield damage value of the weapon is subtracted from the shield's health, resulting in shield damage. The calculated damage resistance value is subtracted from the weapon's hull damage. If this value becomes 0 or less at any time, we stop calculating damage.
We then read out the damage resistance value of your hull integrity module. If hull integrity is 50% or higher, that number is subtracted from the weapon damage. If hull integrity is <50% but above 0%, the damage resistance becomes 0. If hull integrity is 0%, the module's damage resistance is added to the incoming damage. This emulates a damaged hull becoming less effective at protecting the interior from damage. Any remaining damage is applied to a system currently chosen at random, but eventually to be chosen based on the direction of the incoming weapon compared to the direction of your ship, allowing you to target specific areas.
6. Boosting Systems
Any system, except the warp core, may be boosted to allow it to perform more effectively. Here's a list of what boosting a generic system will do:
Shields: Increase damage resistance
Hull integrity: increase damage resistance
Life Support: unable to be altered
Warp Core: unable to be altered
Warp Drive: Increases maximum attainable warp speed (to a max of +5 speed)
Impulse Drive: Increases maximum attainable impulse speed (to a max of +2 speed)
Sensors: Increases maximum sensor range/targeting range
Phasers: Increases phaser damage
Torpedoes: Increases torpedo speed
Transporters: Increases transporter range
* A boosted system will use power at a faster rate than it is being recharged, and eventually run out of power and stop working. Use boosting sparingly. *
7. Warp/Impulse Speeds
The ship has 4 average impulse speeds:
1 field / cycle = 1/4 impulse
2 fields / cycle = half impulse
3 fields / cycle = 3/4 impulse
4 fields / cycle = full impulse
certain ship types and a boosted impulse module will allow additional speeds < 10.
A damaged impulse module reduces the maximum impulse speed.
The ship has warp factors 1-9, with speeds in between the major warp factors. Each warp factor increases the speed by it's factor.
Warp 1 = 10 fields / cycle
Warp 2 = 12 fields / cycle
Warp 3 = 15 fields / cycle
Warp 4 = 19 fields / cycle
Warp 5 = 24 fields / cycle
Warp 6 = 30 fields / cycle
Warp 7 = 37 fields / cycle
Warp 8 = 45 fields / cycle
Warp 9 = 54 fields / cycle
boosted warp core max = 59 fields / cycle
Intermediary warp factors supported, for example, 16 fields / cycle equals Warp 3.5.
A damaged Warp Drive module decreases the maximum speed to a minimum of 10 (warp 1) unless the module is completely destroyed.
Update -- 0.65 alpha
Significant additions to the program:
1) Phasers/torpedo modules added to the ship. Only phasers shoot currently
2) Ability to quick fire or charge fire phasers, at different power costs.
3) Splash screen added
4) Navigational display for viewscreen (overlay) added, indicating ship rotation and pitch, as well as current sector position.
5) targetting display for viewscreen (overlay) added, with a crosshairs that moves on the screen and text showing the type of weapon we are firing.
6) Bug with rotation/pitch removed, thanks to MateoC
A few major updates to this project, which is very much not dead, just slow moving due to RL stuff.
Anyway. The project has been split into 3 distinct segments, each with a different team working on it.
The client side program, for the calculator, is being mainly developed by myself with some help from beck on the 3D rendering of the map.
The server is being worked on by myself, Greg, and beck, with a web-frontend being worked on, which I am working on solo.
To interface the two, we are awaiting the completion of the USB device library in the C libs.
The web frontend will be at http://srv.titrek.us (please do not register on there yet), with the main project page at http://titrek.us. I am hosting the server for the time being on the raspberry pi 3, but am looking to upgrade that to the new RPi 4 with 4g of RAM, which will likely be the final resting place of this server.
Anyone wishing to contribute to this goal, feel free to donate at http://titrek.us/contribute.php.
Interesting. I didn't know this game would be online in some ways. I'm glad this is still being worked on.
Progress has been made on the User Interface for TI-Trek. Here are some screenshots:
The Main Systems module overview screen
The Tactical Systems module overview screen
The module configuration/info popup, accessible by pressing [Enter] on chosen module
Some changes to the power system setup also. Module efficiency (how well it performs its task) will be a function of module battery charge (current power level * 100 / max power storage) multiplied by power draw setting (set power draw / base power draw). Power draw meaning how much power a module will take from its source (core, auxiliary, or internal reserve) every power cycle. Each module will also have a maximum draw, which is the maximum amount of power a module may be set to draw before the module incurs a damage penalty every power cycle. For instance, if the module's max draw is 8 and you have it set to 10, the module will take 2 points of damage every time it draws power. This means you can set a module to use as much power as you want, to super-boost it, but keep in mind the higher you set this, the faster the module takes damage.
That looks impressive, nice :D
TI-Trek Icon-Making Contest
I first announced this contest on Cemetech, but I am hosting an Icon-Making Contest. The jist is... I want to replace the Icon of the Enterprise in the Tactical screen with a custom icon and I'm letting the potential user-base have a first crack at it.
Objective: Design two 32x32 sprites, one a top-down view and the other a side-view (no shields need included)
Submit: Submit to me at [email protected]
Prizes: (1) A TI-Trek contributor plaque or badge, (2) Inclusion of your icon in the default sprites, (3) A mention in the credits.
The image I am looking to replace is this one: (https://codewalr.us/proxy.php?request=http%3A%2F%2Ftitrek.us%2Fgallery%2F0.86_tacticaloverview.png&hash=94cce0738f4405bf0f52b53e73dcf43a3eb5c462)Updates
Not much in the way of actual coding or gameplay, mostly some backend updates and changes.
srv.titrek.us has seen the addition of a UI customizer, an upload form that lets your save custom sprites to replace the default sprites that comprise your UI. Once Mateo fixes convpng's inability to run on Raspbian, I plan to add the ability to actually build the graphics into an appvar for download within your user portal.
Server-side, we have the beginnings of a "server". As of now, the server is capable only of log ins, log outs, some debug messages, and sending specs info. I have also written the appropriate systemd files to enable the `service titrek start|stop|restart|status` ability, as well as server start on boot.
Client side, actual connectivity is hopefully close. I am waiting for an "official" build of the C toolchain to include the USB serial device driver and/or the IP libs... once this is the case, we will be ready to begin testing of basic connectivity between calculator and server (the USB serial mode will require a "bridge" program running on your computer, much like Calcnet did; the IP lib should require only a USB-ethernet cable or adapter). Once we verify basic server functions working, we will begin to implement and test components of actual gameplay.
Of course, throughout the process, beta and alpha releases will be available through the Project's website for the community to test, http://titrek.us, but I ask you remember that beta and alpha releases are inherently unstable and prone to... issues. Consult the changelogs and the bug reports to see what, if any, things you should watch out for.
Project TI-Trek has now been successfully compiled with full USB support... using srldrvce. Due to wonkiness in CEmu's usb support, it is no longer possible to test networking on the emulator (the lib cannot initialize the driver properly). I will need to move to on-unit testing for the remainder of client-side development of this project. I have gotten written the ntwk_Login(), ntwk_Register(), and ntwk_Disconnect routines, which are the first aspects of gameplay that will be tested. While I have been hard at work on client-side things, commandblockguy has been working on a USB=>IP bridge similar to the one Kerm devised for gCn over DirectUSB. And last but not least, beckadamtheinventor has been hard at work developing the server side of things... from map generation to control codes and saving/loading data. For those interested, the server is written in Python, runs on port TCP 1701 (the registry number of the Enterprise), and uses json for long-term storage. It stores connection descriptors to an array of Client objects, which also contain the IP address, username, and some more information about the connected user.
The game will implement semi-accurate space physics. When the map generates, the server pre-generates some paths for celestial bodies using formulas for things like gravity and inertia. Those objects will follow those paths every tick, scaled to the time-rate of the game. In addition to fluidity in space (meaning planets, starbases, etc will not be in exactly the same spot every time you look for them), other objects will pose a threat... black holes will exist and end your journey very fast. Stars will tick their life cycle and then die in a manner determined by their size. Major celestial events, such as star death or planet destruction will result in a path-adjustment for entities within gravitational range of the changed section.
Also, after discussion with beck, another feature will be added to the game, called a synthesizer. This component will allow you to interact with materials you own on a molecular level to enhance them in certain ways. For example, say you place a piece of tempered steel into the synthesizer. You can then select from reserves of any type of element, and the properties they enhance/detract from will most reflect their actual chemical properties (toughness, deflection, malliability, heat resistance, etc). Say you choose to combine the tempered steel with a type of element that increases toughness but decreases heat resistance. You would wind up with steel (hull plating, for instance) that provides a boost against projectiles and physical impact, but is damaged more by heat sources, phasers, and the like. You could also, for instance, infuse your hull plating with a mineral that enhances magnetism, which in turn enhances your shield deflection. And if you attempt to combine unstable materials, you could, for example, wind up inflicting feedback damage to an attacking enemy, but also winding up with vastly increased damage to your own ship.
For anyone wishing to have a look at the code-base so far (yes, it will need some optimization), here it is. I will say, in my opinion, at least the network handling is remarkably well-organized... for what I usually do.
I completely forgot that this project had multiplayer even though it's in the title XD, I dunno why. I saw the screenshots and it looks promising. The TI-84+ series only has one online multiplayer game (Obliterate) so it would be cool to see another come to fruition. :)
* First Pre-Release *
== TI Trek Client version 0.0.92 Released ==
At long last, the first pre-release for TI-Trek is finally out. The current version of the client software provides the ability to login or register on our server (the TI-Trek server), as well as to disconnect. It also comes with an autoupdate system, to allow us to push updates to clients easily (the updater simply compares your existing version string with the version string for (1) the latest client, and (2) the earliest compatible client. If your client version is out of date, but still compatible, you will be given the option to autoupdate. You can say yes or no, either way, you will log in. However, if your client version is not compatible with the server, you will not be able to log in unless you either autoupdate or update manually.
To actually perform the autoupdate, the server will fetch the TITREK.bin file within the latest client directory and begin sending the data inside it over the TCP socket, in 1024-byte intervals. The client dumps this data into a temporary program file. To conclude the transfer, the final packet of the autoupdate is empty, which tells the client it is done. The client will then call ti_Close(), then rename the program to TITREK, then call an assembly routine that reloads the new program into RAM, and starts over. Meanwhile, if the latest client version has a "gfx-force-update" flag set in the config for that version, the server then proceeds to send a new graphics pack to the client, using the same method. Once again, an empty packet finishes the transfer, and then the graphics are reinitialized.
Meanwhile, the Web Deck (the GUI front-end for account management) for the game has also seen work. The server's IP is play.titrek.us... connecting to that with the bridge connects to the game server, but going to that IP in a browser takes you to the Web Deck (it's also accessible through the footer of the main site). To prevent spam accounts and to ensure accounts are active, only active users who have registered an account with their calculators can access the web deck; Once your account is created there, you can log in using the username/password you used. When logged in you can modify your Display Name, Password, and Email Address, as well as upload custom graphics to replace the existing ones (not yet implemented). Also admins and moderators can see all registered users' display names, emails, and usernames (but not passwords). They also get a printout of the server's console that refreshes every 30 seconds (*can anyone tell me how to make a widget like that scroll dynamically to the bottom- as in load in scrolled down, and scroll down as more content is added? it's a div with overflow auto.*) via ajax.
Special thanks to:
beckadamtheinventor: server dev
commandblockguy: bridge dev
me (ACag): client dev, web dev
graphics devs: Eaghan, Pieman, Ampersand, TurquoiseDrag0n, Argus, epsilon
Downloads Available at: http://titrek.us/downloads.php
This program requires the following C libs: fileioc, keypadc, graphx, srldrvce, usbdrvce.
To use the last two, you will need to obtain the srldrvce branch of the toolchain, or ask one of the project devs for a copy.
A few teasers from the upcoming 0.0.94 release.
1) Custom graphics packs supported. To indicate that the graphics pack is custom made (so the client doesn't do a normal version check), you use the following settings in convimg, in addition to the normal ones.
lut-entries: trueSpecial thanks goes to MateoC for implementing the `lut-entries` option in convimg... it simply moves the offsets LUT into the appvar itself, rather than leaving it defined in the program. This allows the program to load any array of sprites as assets. You will still have to keep the same sprite order, however. Refer to the link I posted previously for details.
2) The splash screen has been completely reworked.
The menu interface is cleaner, and the networking status is indicated by icon now, instead of by text. A green USB icon indicates that the serial device is ready, a red icon indicates some error. If we implement nanotube, or internetce support, an icon will indicate if the program is preferring that connection.
3) The program now alerts you on the splash screen if your graphics version is incompatible.
The incompatible graphics is triggered in one of two ways:
a) You are using a default sprite pack and the version header does not match the one set within the program's `reqd_version` array.
b) You are using a custom sprite pack (version string 0xff, 0xff), and the number of sprites in the LUT does not match the number of sprites in the program build.
Either of these being the case causes the above alert to show up, and the "Play Game" menu option to just return you to the main menu.
All splash screen and error/alert icons are built directly into the program to ensure they are available... the asset pack only supplies stuff used for the game.
Update - v0.0.95
Planned to make this the full combat beta, but some security enhancements to the server and the whole setup make it necessary to release a client and bridge update before then.
NEW FEATURE - Client-Side Server List
As of right now, the server to connect to (through the bridge) is no longer controlled by the bridge's config file... it's controlled by the calculator itself.
Slot 1 is set by default and cannot be edited. Slots 2-10 are blank and can be edited (so that the game can connect to other hosted instances of the server).
The client adds 2 new packets, CONNECT and DISCONNECT.
Connect: Instructs the bridge to open a tcp socket to the server or host name following the control code in the serial packet.
Disconnect: Instructs the bridge to close the current socket.
* So long as the calculator does not unplug or disconnect from the bridge, you can connect/disconnect/reconnect without needing to restart the bridge. *
* Special thanks to commandblockguy for implementing this change. *
NEW FEATURE - On-Calc Mini-Log
The calculator has a 4-line mini-log, with each log-line buffered to 50 characters. This log can display errors, info, debug messages, and server broadcasts. The widget has variable height based on how many of the 4 lines it needs to display, and also remains on the screen for a configurable time. Default is 100 ticks. Any time a new message is written to the log, the clock resets.
And here is the new Settings interface to change the log timeout:
NEW FEATURE - Server Supports SSL
This may have been posted in this thread earlier, but the server is written with an optional SSL context. This can be enabled in the server config. The actual handling of certificates and renewal is not something the server does, so anyone hosting an SSL instance will need to handle ensuring their SSL config is up to date. The SSL path is also configurable, it just needs to be readable by whatever user is running this service.
*As of right now, the bridge does not support SSL, so any SSL servers will be unable to be connected to.*
NEW FEATURE - Verification-Based Authentication
As an attempt to dissuade connections to this service that are not from the calculator, such as random port probes or script kiddies, the server now implements a code-based verification system. When a user registers an account, an 8-digit code is generated and written to the user's account file, as well as sent to the calculator for display. You will be required to log into the web deck and input your verification code before you will be able to log in to the game server. This will allow us to filter unsolicited connections, as well as remove any anomalous user accounts created.
I love all the network backbone and security! Looks awesome and says great things about the CE's potential.
Quote from: Caleb Hansberry on September 29, 2020, 06:41:13 AMI love all the network backbone and security! Looks awesome and says great things about the CE's potential.
The client can now send chat messages to the server.
The log display widget wraps text.
Began work on a system for rendering client-side particles in response to certain things that occur in the game. One of those particles I have implemented... it is a crack that appears on your screen when your hull integrity falls below a certain level and remains there until your ship is repaired. It is a mask type of image that renders on top of everything and consequently obfuscates the display (if on top of it), like an actual crack in the screen would.
Updates! Updates! Updates!
Version 0.0.99pre is still under development, but here is a few highlights for development so far.
1. Packets for MODULE_STATE_CHANGE, ENGINE_MAXIMUMS, and SETSPEED are now implemented at least in part. They don't check for certain statuses that might prevent the actions yet, but they do update, relay their responses to their calc, and have the effects propagate to your on-calc GUI.
2. The engine/speed configuration interface is now implemented. Accessed by pressing [Log]. You can scroll between your available engines, move sliders around to change your speed, then press [Sto] to engage your new speed.
3. With Debug Mode enabled in the client settings, the calculator now prints the Control Code and size of every packet it receives to the log widget.
4. Server-side, TrekFilter is now formally implemented into the service. TrekFilter is a custom firewall I made for the service, programmed to understand its protocol better than a system firewall could, and able to interact with your system firewall through the use of custom fail2ban jails.
Here a screenshot showing new (and some old) progress.
Here is a link to the Documentation: http://titrek.us/components/downloads/usersguide.php
Quote from: Pieman7373 on December 14, 2017, 05:10:50 AMOkay, this is pretty much the coolest thing i have ever seen! I can test stuff :3
I agree, finally :D
A few mostly silent updates have pushed our latest version to 0.0.99. This latest version has a few small tweaks.
1) Firstly, the program now implements a minor change to the SRLDRVCE implementation that is believed to fix issues with Windows... The fix was actually within the SRL/USB driver packages, so you will need to update those as well.
2) The text input routine now wraps if you overflow the first line. It should do so without text shadow or graphical glitches but if any occur please report back.
1) A few bugs in TrekFilter resolved... TrekFilter now properly handles packets with invalid characters.
2) Client disconnect is mostly stable now... Rather than having the client send a Disconnect packet to trigger the user to disconnect, we simply detect the bridge disconnecting, trigger a custom exception that clears the socket and deletes the client from the dict. This also allows TrekFilter to interact similarly without triggering exceptions. Let me tell ya'll, I have come to love the `raise` command :p.
1) The User Info and Interface tabs are combined into one tab, "Info and UI". This page contains your user information and lets you edit it, but it also can display your player stats, ship stats, and provides links to two tools, the model uploader and the asset pack maker.
2) The asset pack maker tool deploys convimg to assist users in generating their own asset packs, using the procedures outlined by convimg. You can upload replacement sprites of the same size or direct the tool to use the default. When every sprite is assigned to either custom or default, you can then build your appvar. The Web Deck implements lib-yaml to generate a well-formed YAML, and then runs convimg. This feature has been lightly tested, but to all potential users, feel free to have at it.
3) The ship model uploader tool is similar to the asset helper, in that it allows you to upload your own custom model to define your ship appearance. For now, I will ask people to not use this tool, as there is no size limiter yet. That is part of the purpose of the new 3D Modeling Contest I started in the Graphics section of this forum--to ascertain a good limiting size. The page also implements WebGL to render any existing model you may have uploaded onto the page for quick viewing. That render IS actually the file upload button.
Also, for anyone interested in testing out existing features, please note that in order to access the Web Deck, you must register first with the server using your calculator. This is a feature meant to prevent stray accounts from people who do not intend to play. I may ease that in the future for certain extenuating circumstances, but as of now it stands.
Also also, anyone who previously made an account on the system will need to do so again... during a config change, I deleted the accounts directories. Sorry.
Also also also, 3d frame compositing is planned to happen server side, with the server implementing opengl or pyglet to generate a frame for each client, a compressed RLET sprite, that is then rendered to the client through the standard graphx calls. As of right now that, as well as collision, are the main things that needs to be done before we are ready to start putting out actual playable releases rather than feature showcases.
Also also also also, for those unaware, the client-server will implement an auto-update functionality allowing clients to be served, and then subsequently install and reload, newer versions of the game upon connecting to the server without dealing with the hasstle of doing it manually.