News:

SMF - Just Installed!

Project Bane

Started by Joshex, Nov 12, 2023, 02:32 AM

Previous topic - Next topic

Joshex

so, in 2011 I began working casually on a project called "Project Bane" in blender. I knew what I wanted to do, and what I had to do. Then in 2012 when CoH was sunset I kinda went full-in for a bit and started making what I hoped would one-day be a spiritual successor to City of Heroes.

however all I could get out was on offline demo for my master's degree project. It was hard work to essentially cram the menus and overlay and characters items and scenery into 1 year. in the end I ended up cutting the scene short and setting very small map bounds. and the character animations were awful, I didn't even auto-inverse-kinetics (Auto IK) them, they were all manual bone rotations so they looked stiff.

this thread is for discussing this project.

so, what did I actually showcase during my masters degree if not a full game?

It centered on game tutorial philosophy, specifically training the character with minimal text. essentially we're talking Super Metroid style tips, but rather than placing them over the screen, I decided to make multiple billboards in game whose image would change based on conditions being met. such things as running out of stamina, getting low on HP, getting defeated, and tasks pointing you to click your contact to get a mission, and hand-in completed missions, even teaching you how to target enemies by clicking them. It was all helpful tips as graphical billboards.

you might see where this is going. recently there was a competition for billboard design, so, I'd like to share my idea with City of Heroes: have the billboards actually help communicate tips to players. I'll try to post them tomorrow. Looking back at them now is well kinda like looking back at childhood drawings, they are a bit humiliating in their current state so bear that in mind. also the graphics and symbols are my own custom designs intended for Project Bane so they may not match city's items exactly. I might change that if I get time between now and december 30th.



lastly, what became of project bane?

well, it's really on-hold. blender has some limitations I did not know well enough to get around at the time. the major problems are:
1: dynamic text that doesn't abuse memory is kinda unstable. in blender 2.5 to 2.79 you can use a text object, but that renders the text from a vector curve, and seems to suck up processor and memory power. In 2.49b you use a .tga image font, the problem there being that when you transfer the game to a different machine all the text turns into '@'s , the fix is to go in and re-unwrap every single text field and lay it out on the @ in the image, which is not something most casual players will easily be able to do. theres another method which requires a bit more programming expertise and essentially costs 1 polygon per letter in some cases, it also requires an in game dictionary of words and phrases so as to cut down on polygons. it would be a ton of work. also word wrap is something I need to program myself, as well as text window bounds, scrolling and such, it's likely it'll have to be some crazy videotexturemodule trick to make a chat box actually scroll and hide out of box text.
2: Dynamic shadows, blender only allows buffered shadows with a spot lamp. it also gets pretty pixelated over large distances. there's a gamelogic bricks function to make an object into a 2D n64 style shadow that follows the player around at ground level and hangs over edges floating in the air, and then theres theoretical raytraced shadows using a shadow scene and the render to texture module but it's not confirmed to work.
3: Encryption. this was a real kicker. I think python has some form of data encryption module, but there doesn't seem to be a controlled method for key negotiation and exchange. I did make my own data encryption method the problem is building it lol.
4: motion textures, blender can only do motion textures with the videotexture module, it uses essentially double the graphics memory and processor power as rendering the gamescreen then converts it to the desired image resolution. there's other methods I've stumbled upon more recently that should help essentially mesh swapping.
5: updates, patches etc. while there are methods to do this automatically, you essentially need to build the updater into the game, and as far as I know it has some critical limits. real-time mesh and image creation are essentially a pipe-dream in-game. they are meant to be done out of game.

the pros of blender were:
open source; so players could literally custom model their character model and animate their own attacks with custom graphics effects. the downside is these would only show up to other players once officially added to the server by mods and after the client is updated.

the downsides were mainly:
a lot of dev work, and no one wanted to help.



This project may be picked up again in the future. it's not abandoned. But right now I think I need to start smaller and put out something to generate interest in my game dev abilities (which I am doing, nearly done with my first game). If this project does go live again, training will be available.

what can I tell you about the game? not much, it kind needs some secrecy till it's ready to launch. I'm actually glad I didn't rush it out. building a superhero universe storywise is a big job that requires alot of careful assessment as you go forwards to prevent plotholes and limits which write you into a corner.

the game premise and setting are largely known, gameplay elements are in their infancy but are already 90% planned out. numbers are the real work there, I have a spreadsheet somewhere that needs a major reworking. @_@ math.. it is not city of heroes, there are a long list of monumental changes, some of which may need more testing to determine better methods of application. I currently have no funding.

Character models will need reworking: last I checked the character model I made had working rigging, but could be a lot better with my knowledge now. the polycount with clothes was about 10,000 polygons. which is crazy for a single character. so that will need toning down. I currently only have a male base model, I'm nearly done with a basic female base model, just need to finish rigging the hands and make eyelid shapekeys, but that's in anime style, so while we could include that, I still want to make a comic book style and realistic style, most of which is just the face.

but yeah, this is on hold. if you are interested let me know.
Ye cannie be dividin by zero! However, ye can be dividing 0.0 by a non-zero! that'd be a float.
always Decimal(str(your float)) before you int( your float).

Joshex

#1
ok so, I've been working in blender and fine-tuning my skills. finding methods to do things that actually overcome some of the issues in the first post, so I felt I'd update.

it's still on-hold. blender has some limitations I did not know well enough to get around at the time. the major problems are:
1: dynamic text that doesn't abuse memory is kinda unstable. in blender 2.5 to 2.79 you can use a text object, but that renders the text from a vector curve, and seems to suck up processor and memory power. In 2.49b you use a .tga image font, the problem there being that when you transfer the game to a different machine all the text turns into '@'s , the fix is to go in and re-unwrap every single text field and lay it out on the @ in the image, which is not something most casual players will easily be able to do. theres another method which requires a bit more programming expertise and essentially costs 1 polygon per letter in some cases, it also requires an in game dictionary of words and phrases so as to cut down on polygons. it would be a ton of work. I studied text using the bitmap fonts and got it to transfer macghines by packing external files into the blend and the setting all paths relative by links that was the problem because the link is the textual location of the image file, so even if you pack the image, blender font engine is still looking for the bitmap ascii file at the original linked location which probably doesn't exist on another machine, so by making the links relative to where they are in the game engine now the text works on any machine.
also word wrap is something I need to program myself, as well as text window bounds, scrolling and such, it's likely it'll have to be some crazy videotexturemodule trick to make a chat box actually scroll and hide out of box text.
I made a basic wordwrap, but I can do better. the basic wordwrap wrapped based on the character width of a set number of fullwidth text characters "@" but for thinner characters it wraps each line short. so rather than setting a character limit per line I decided I'd have to figure out how much space each character occupies on width and make a dictionary of widths so wordwrap can be calculated by textbox width.
in the process of doing this a bug showed me that I wont need a video texture module trick to handle scrolling at all, instead I can just adjust which lines of text are displayed based on scroll percent.
oh and I made sliders. so scroll bars are a go. (I'm actually using them for a color picker window at current, but that needs to be broen down into smaller networks of game logic, separating red green and blue, because I hit some sort of bugged limit of how many logic bricks blender will actually show at one time, kinda bad when you select an object and look through it's logic bricks and say "I could have sworn it had a keyboard sensor, oh right it does, but it's not shown.. why? oh, I see too many objects linked together").

2: Dynamic shadows, blender only allows buffered shadows with a spot lamp. it also gets pretty pixelated over large distances. there's a gamelogic bricks function to make an object into a 2D n64 style shadow that follows the player around at ground level and hangs over edges floating in the air, and then theres theoretical raytraced shadows using a shadow scene and the render to texture module but it's not confirmed to work.
*Crazy Smile* my mad science works! WAHAHAHAH, so the green text is a go. I can render a shadow layer with copies of the models but in shadow color and use the video texture module to capture that camera's view (from each lamp) with an alpha transparent background and paste them onto a flat plane, then video texture render all those lamp reenders of shadow objects onto a single texture on the actual scenery. it has some limits but I've seen that lots of games hit the same limits.
Edit: I messed around with spot lamp buffered shadows, on my old computer they were always super pixelated and awful over large distances, not only that, the sourcecode that creates them does them in a different draw step over the top of the window, this used to cause buttons sliders and text boxes in the buttons window/editor to become graphically unresponsive (they still work, but the button slider or text graphic does not change while buffered shadows are active, so you couldn't see what you were doing), this is now not the case on this machine, I found ways to smooth the shadows over decently long distances, and they don't bother the buttons any more (must have been a RAM issue on my old computer.
3: Encryption. this was a real kicker. I think python has some form of data encryption module, but there doesn't seem to be a controlled method for key negotiation and exchange. I did make my own data encryption method the problem is building it lol.
still no progress here. I did reevaluate my message encryption system, it is valid. but I need to program a working example.
4: motion textures, blender can only do motion textures with the videotexture module, it uses essentially double the graphics memory and processor power as rendering the gamescreen then converts it to the desired image resolution. there's other methods I've stumbled upon more recently that should help essentially mesh swapping.
I practiced with motion textures, and finally got around to making some sphere-looping textures like fire. that was a challenge, but now I have a system for making sphere-looping generated textures. things like fire were a former issue for me in blender but now I can make looping fire without the frame-loop-reset flicker.
Edit; I've studied motion textures in blender, I know how to use image frames for animation now. I've been studying special effects recently I'm getting close to covering all the bases in game; Fire, water(ripples, splashes and player interaction), rain/snow, clouds, smoke, sparkles. I do need a better system for things like lightning or energies, some can be pseudo-particle effects, but many cannot and will need clever usage of geometry and animated textures.   
5: updates, patches etc. while there are methods to do this automatically, you essentially need to build the updater into the game, and as far as I know it has some critical limits. real-time mesh and image creation are essentially a pipe-dream in-game. they are meant to be done out of game.
images can be swapped with the video texture module, communicating these images to other players can be done as well ( I found that out when messing with images in TKinter windows, there's built-in methods to convert an image directly into a data form which can them be sent through a socket gram.
The .blend can be saved from active memory, but can only be reloaded from file ONCE while in-game. a second time crashes blender.
that one reload is enough to display a created mesh or any other modifications to the game, sounds are a bit more tricky. sound updates will have to be a "update complete, please close and reopen the game" situation.



I'm at the point where I could almost START to do this. emphasis on start, as it'd be a long haul of a job to put it together. due to IRL I will not have time for quite a while though.
Ye cannie be dividin by zero! However, ye can be dividing 0.0 by a non-zero! that'd be a float.
always Decimal(str(your float)) before you int( your float).