Posts: 537
Threads: 5
Joined: Sep 2012
09-03-2013, 09:36 PM
(This post was last modified: 09-03-2013, 09:40 PM by Phaze.)
(09-03-2013, 06:40 PM)TheShyGuy Wrote: Hey Phaze (and Ridge?), here are a few images of the progress on the tool.
https://www.dropbox.com/sh/ujnz733i3flof...M5/random2
They are from a few days ago.
Welp, I'm put to shame. At l-least I got out d-database SQL for Mask...
http://pastebin.com/PvtRSsYQ if u wanna see (and tell me where I fucked up, assuming I did)
Could've sworn # commented in SQL...
Also showed Ridge that for you since he doesn't check this forum iirc.
Posts: 524
Threads: 9
Joined: Jul 2012
haha lol. The docking thing wasn't me though ( https://github.com/dockpanelsuite/dockpanelsuite)
I don't know anything about SQL. I've never needed to work on anything with servers and stuff so I can't help you out =/. I'll probably have to look into to that stuff after I start working on the game. Having atleast online multiplayer is a must for it.
I pm-ed Ridge already too because I was unsure if he was okay with me showing his Popple SpriteSheet.
Posts: 537
Threads: 5
Joined: Sep 2012
(09-03-2013, 09:53 PM)TheShyGuy Wrote: haha lol. The docking thing wasn't me though (https://github.com/dockpanelsuite/dockpanelsuite)
I don't know anything about SQL. I've never needed to work on anything with servers and stuff so I can't help you out =/. I'll probably have to look into to that stuff after I start working on the game. Having atleast online multiplayer is a must for it. Ah :v
It's not very hard... imo. SQL doesn't really execute anything and just describes so the learning curve is less steep. Just gotta learn the keywords. But on the other hand, knowing how to use it WELL is another thing... one I'm not sure I've grasped yet.
Which game?
Posts: 524
Threads: 9
Joined: Jul 2012
09-03-2013, 10:15 PM
(This post was last modified: 09-03-2013, 10:31 PM by TheShyGuy.)
It's not Ridges game (if that's what you were thinking?) more or less because all I know about it is that you guys need this tool. The game I will be be working on is a 2D brawler. I'll probably get started on it when I atleast have support for animating with the tool. -Which I'm about to do soon.
Oh yea, I'm not going to support skewing anymore (among a few other things). It's still there and using it doesn't break the engine. But I don't know how to decompose a matrix with skew.(SKRT -> Scale * Skew * Rotation * Translation). Since I can't do that, I can't correctly do global transforms =/. Googling gives me answers but nothing that is dummed down enough for me ( I haven't learned Linear Algebra yet).
----
What's the issue you have with the SQL link you posted?
Been programming a bunch of photoshop style OpenGL ES shaders for Game Maker Studio games. Here's an image of the curves tool shader.
Posts: 524
Threads: 9
Joined: Jul 2012
That's cool, care to describe a bit more about the shader code? You've probably already heard of it already, but look up distortion shaders. They're pretty fun to mess with.
----
Progress on tool:
https://www.dropbox.com/sh/ujnz733i3flof...gTool/9-15
There's still quite a bit to do on it. Tomorrow, I'll probably work on keyframing and then making a dopesheet. That means there's no interpolation right now, but the "frame by frame" animating works fine. After that, I'll add a some polish (note the ugly "Play" button among other things). I'm going more for functionality right now as I've picked up a practice game.
I'm unsure who will use this, but I hope someone finds a use. It's not something to sprite animate with. It's more of like interpolation animating, instead of doing it by hand. I don't know. For some reason, I'm doubting the usage of this for normal spriters that aren't making a game or would even need this kind of animation.
Anyways, after I get atleast some polish in, I'll probably start working on the prototype for the practice game. Heh, which means I also need a small tool to make some small attack scripts to use with the animation tool. That's the plan right now, an animator and a small tool next to it to view the attack collisions and effects.
Well, the shaders that I've been programming are essentially the same as the Photoshop/GIMP tools that everyone uses, color correction tools like Contrast/Brightness, Hue/Sat/Lum, Gamma, Color Curves, Levels, and Blend Modes like Overlay, Color Burn, Exlude, etc.
I'll probably program some distortion shaders for underwater effects, say some distortion with some chromatic aberration and god rays. Though I'd probably do that with Unity, since as far as I'm able to tell, Game Maker isn't the best at deferred rendering techniques. Game Maker shaders are in OpenGL ES though, so if you know C++ (Or really any OOP language), you should get it in a jiffy. Unity uses their own proprietary shader language though, most likely for compatibility.
And that's looking like a beast tool, a "puppet" based sprite animator.
Posts: 524
Threads: 9
Joined: Jul 2012
Progress so far, visually the same:
https://www.dropbox.com/s/xsrfmkl2kz7mrg...onTool.png
Most of the development has been non-visual behind the scenes stuff. The scripting window is so useful, especially when you gotta keep recreating the same animations due to code updates.
making a battleship game for my programming class (GUI not necessary)
fun fun fun
double post cause i managed to make it
Code: # -*- coding: utf-8 -*-
"""
Éditeur de Spyder
Ce script temporaire est sauvegardé ici :
/home/user/.spyder2/.temp.py
"""
from random import *
from copy import *
def generate_player():
# crée la grille de jeu du joueur et place le bateau du joueur à l'emplacement choisi
global playersea
i=0
while i<=4:
playersea.append([0,0,0,0,0])
i=i+1
# on génère la grille vide
print "Entrez la coordonnée X de la queue de votre navire (de 1 à 5):"
xdone=False
while xdone==False:
x=input()-1
if x>=0 and x<=4:
xdone=True
else:
print "Coordonnée invalide - Recommencez:"
# le joueur entre la coordonnée x du premier carre du navire, et on verifie qu'elle est valide
print "Entrez la coordonnée Y de la queue de votre navire (de 1 à 5):"
ydone=False
while ydone==False:
y=input()-1
if y>=0 and y<=4:
ydone=True
else:
print "Coordonnée invalide - Recommencez:"
# le joueur entre la coordonnée y du premier carre du navire, et on verifie qu'elle est valide
playersea[y][x]=1
print "Entrez la direction dans laquelle est orienté votre navire (N,S,E ou O):"
cdone=False
while cdone==False:
cardinal=raw_input()
if cardinal=="N" or cardinal=="S" or cardinal=="E" or cardinal=="O":
cdone=True
else:
print "Direction invalide - Recommencez:"
cdone=False
if (cardinal=="N" and y==0) or (cardinal=="S"and y==4) or (cardinal=="O" and x==0) or (cardinal=="E" and x==4):
print "Ceci vous ferait sortir de la grille de jeu - Recommencez:"
cdone=False
if cardinal=="N":
playersea[y-1][x]=1
elif cardinal=="S":
playersea[y+1][x]=1
elif cardinal=="E":
playersea[y][x+1]=1
elif cardinal=="O":
playersea[y][x-1]=1
# le joueur entre le point cardinal vers lequel pointe le navire, et on verifie qu'il est valide
def generate_enemy():
# crée la grille de jeu adverse et y place aléatoirement le bateau de 2 cases à couler
global enemysea
i=0
while i<=4:
enemysea.append([0,0,0,0,0])
i=i+1
x=randint(0,4)
y=randint(0,4)
enemysea[y][x]=1
# ici on crée le premier carre du bateau aleatoirement
cardinal=["N","S","E","O"]
edge=0
if x==0:
cardinal.remove("O")
edge=edge+1
if y==0:
cardinal.remove("N")
edge=edge+1
if x==4:
cardinal.remove("E")
edge=edge+1
if y==4:
cardinal.remove("S")
edge=edge+1
z=cardinal[randint(0,(3-edge))]
# ces conditions permettent de verifier si le bateau est en bord de grille et bloque adequatement la creation du 2e carre
if z=="N":
enemysea[y-1][x]=1
elif z=="S":
enemysea[y+1][x]=1
elif z=="E":
enemysea[y][x+1]=1
elif z=="O":
enemysea[y][x-1]=1
# et ici on place donc le 2eme carre du bateau
def player_turn():
# fait tirer le joueur aux coordonnées choisies, puis indique s'il a touché un bateau adverse, et garde les coord de tir
global enemysea
done=False
while done==False:
print "Entrez la coordonnée X de votre tir (de 1 à 5):"
xdone=False
while xdone==False:
x=input()-1
if x>=0 and x<=4:
xdone=True
else:
print "Coordonnée invalide - Recommencez:"
# On fait entrer au joueur la coordonnée X de son tir, et on verifie si elle est valide
print "Entrez la coordonnée Y de votre tir (de 1 à 5):"
ydone=False
while ydone==False:
y=input()-1
if y>=0 and y<=4:
ydone=True
else:
print "Coordonnée invalide - Recommencez:"
# On fait entrer au joueur la coordonnée Y de son tir, et on verifie si elle est valide
if isinstance(enemysea[y][x],str)==True:
print "Vous avez déjà tiré là - Recommencez:"
done=False
elif enemysea[y][x]==1:
print "Touché !"
global playershot
playershot=playershot+1
enemysea[y][x]="O"
done=True
elif enemysea[y][x]==0:
print "Raté !"
enemysea[y][x]="+"
done=True
# On verifie si l'endroit du tir a deja été fait, et s'il s'y trouve le bateau adverse ou simplement de l'eau
def enemy_turn():
# fait tirer aleatoirement l'ennemi
global playersea
global enemyshot
if enemyshot==0:
x=randint(0,4)
y=randint(0,4)
# Ici l'IA va simplement tirer aleatoirement
elif enemyshot==1:
i=False
for iy in range(0,5):
for ix in range(0,5):
if playersea[iy][ix]=="O" and i==False:
y=copy(iy)
x=copy(ix)
i==True
cardinal=["N","S","E","O"]
edge=0
if x==0:
cardinal.remove("O")
edge=edge+1
if y==0:
cardinal.remove("N")
edge=edge+1
if x==4:
cardinal.remove("E")
edge=edge+1
if y==4:
cardinal.remove("S")
edge=edge+1
z=cardinal[randint(0,(3-edge))]
if z=="N":
y=y-1
elif z=="S":
y=y+1
elif z=="E":
x=x+1
elif z=="O":
x=x-1
# Ici l'IA va determiner si le tir précédent etait bon, et tire ainsi sur un emplacement adjacent
if playersea[y][x]==1:
print "Vous avez été touché !"
enemyshot=enemyshot+1
playersea[y][x]="O"
elif playersea[y][x]==0:
print "L'ennemi vous a raté !"
playersea[y][x]="+"
def print_maps():
# affiche les cartes apres chaque tour
playersea_shown=deepcopy(playersea)
for y in range(0,5):
for x in range (0,5):
if playersea[y][x]==1:
playersea_shown[y][x]="#"
elif playersea_shown[y][x]==0:
playersea_shown[y][x]="~"
enemysea_shown=deepcopy(enemysea)
for y in range(0,5):
for x in range (0,5):
if enemysea_shown[y][x]==0 or enemysea_shown[y][x]==1:
enemysea_shown[y][x]="~"
# Ici on crée deux listes identiques à celles des grilles dans lequelles on va changer les int en str pour l'affichage
print "Votre grille Grille adverse"
for i in range(0,5):
print " ", " ".join(map(str, playersea_shown[i])), " ", " ".join(map(str, enemysea_shown[i]))
# Les lignes suivent executent le jeu de bataille navale
enemysea=[]
generate_enemy()
playersea=[]
generate_player()
print_maps()
playershot=0
enemyshot=0
while playershot<2 and enemyshot<2:
player_turn()
enemy_turn()
print_maps()
if playershot==2:
print "Gagné !"
else:
print "Perdu !"
if anyone's got a python interpreter or anything
Posts: 524
Threads: 9
Joined: Jul 2012
10-24-2013, 02:51 PM
(This post was last modified: 10-24-2013, 02:51 PM by TheShyGuy.)
Took a break from my game for the past day or so and decided to follow a deferred lighting tutorial:
Posts: 537
Threads: 5
Joined: Sep 2012
I think I'm getting to the point where I can start being productive proper, again.
Sorry to come to you lot so soon but it's not really asking for a solution, it's just asking for a name. In Mask, I've been thinking about how I have like 2-3 separate variables for specific numerical values so I was considering creating a Class similar in concept to a Fraction that would store the current value, the maximum value and perhaps the initial value when the object was constructed. I could also implement checks to prevent exceeding the max and all that jazz too from one implementation.
Thing is... I don't know what to call it. I would use "Fraction" but that doesn't feel correct, it implies a strictly mathematical context. I would use something like "Stat" or "Status" but I'm using the former as enums to refer to those specific stats (HP, FP, BP, POW, DEF, etc.) and the latter as an enum to refer to specific statuses like Dodgy or Hurt.
(11-10-2013, 06:52 PM)Phaze Wrote: In Mask, I've been thinking about how I have like 2-3 separate variables for specific numerical values so I was considering creating a Class similar in concept to a Fraction that would store the current value, the maximum value and perhaps the initial value when the object was constructed.
Not really understanding this. What would the class look like, and what would it be used for?
You may have a fresh start any moment you choose, for this thing that we call "failure" is not the falling down, but the staying down. -Mary Pickford
Posts: 537
Threads: 5
Joined: Sep 2012
(11-10-2013, 08:24 PM)puggsoy Wrote: Not really understanding this. What would the class look like, and what would it be used for?
It'd have 3 values in it; baseValue, curValue and maxValue. It's used to consolidate data for stats like HP into single objects instead of 3 separate variables.
Like, say when creating it it's created with a value of 20 and it represents HP. I later increase the maximum by 5 and later still, the card of which this data object belongs to takes 10 damage.
baseValue is 20
curValue is 15
maxValue is 25
baseValue may be superfluous but I think knowing the base value might be useful.
|