Java-Gaming.org    
Featured games (81)
games approved by the League of Dukes
Games in Showcase (499)
Games in Android Showcase (118)
games submitted by our members
Games in WIP (568)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: 1 ... 14 15 [16] 17 18
  ignore  |  Print  
  Go on, ask me anything.  (Read 67644 times)
0 Members and 1 Guest are viewing this topic.
Offline DruLeeParsec

Junior Member


Medals: 2
Projects: 1



« Reply #450 - Posted 2012-05-11 13:22:39 »

Quote
It does use a bunch of reasonably well understood tricks to get people hooked and to buy it, which I will have no qualms about using one day

I would love to use the trick of having Penny Arcade write 2 comics in a row which showed the game in a positive light.  In September of 2010 Penny Arcade ran those 2 comics and Notch had so many registrations that it took his servers down for almost a week.  In the end, when the servers came back up he went from roughly 65,000 alpha users to over 300,000 alpha users (I was one of them).

I think that was the single point which really launched Minecraft.

I use to be utter addicted to MC.  But I haven't played it for months. I find that more and more I only do my gaming in 10 to 20 minute chunks.  I think there are a lot of people in that position and this may be a reason that mobile games and the "casual gaming" revolution are happening.
Offline princec

JGO Kernel


Medals: 391
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #451 - Posted 2012-05-11 13:53:50 »

I guess that's why we still manage to sell the odd one of our arcade games - it's short, manageable gaming, with no long term investment.

Cas Smiley

Offline Cero
« Reply #452 - Posted 2012-08-12 14:55:09 »

How do you handle patching/updating ?

I'm tempted to use traditional patches, check for updates ingame and inform player, then just NSIS exe files which find the installation per registry (windows) and apply.
But I'm not sure with linux and mac, but it should work similarly...

Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Mads

JGO Ninja


Medals: 26
Projects: 3
Exp: 6 years


One for all!


« Reply #453 - Posted 2012-08-12 17:31:16 »

On that note: How does one update the "update"-code?

Offline Riven
« League of Dukes »

JGO Overlord


Medals: 802
Projects: 4
Exp: 16 years


Hand over your head.


« Reply #454 - Posted 2012-08-12 18:00:34 »

On that note: How does one update the "update"-code?
Once doesn't, because one realizes it's the most important part of one's project, and codes it correctly.

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings
Offline sproingie

JGO Kernel


Medals: 202



« Reply #455 - Posted 2012-08-12 18:18:14 »

Any decent patcher can patch itself.  Windows Update and various Linux package managers do it all the time.  Game updaters tend to not do that since they usually ship the patcher as part of the update.
Offline Damocles
« Reply #456 - Posted 2012-08-12 18:50:01 »

Split the application into a Launcher and the Game.

The Launcher updates the Game, the Game the Launcher.

Offline sproingie

JGO Kernel


Medals: 202



« Reply #457 - Posted 2012-08-12 19:33:14 »

You simply don't need to do that.  The launcher updates itself and restarts.  On Windows, you sometimes have to defer self-updates til relaunch, but that doesn't apply to Java.
Offline Mads

JGO Ninja


Medals: 26
Projects: 3
Exp: 6 years


One for all!


« Reply #458 - Posted 2012-08-12 20:27:31 »

Hmm. Is it possible to work with a jar you're currently running? Can you delete it, and download a new one?

Offline Roquen
« Reply #459 - Posted 2012-08-12 20:40:48 »

Why not just have two (min).  One contains launcher and (others) game.  Separate classloader for game code and no need for restart unless the launcher/updater is updated (and JRE if you're bundling)
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline princec

JGO Kernel


Medals: 391
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #460 - Posted 2012-08-12 22:37:17 »

We don't do any auto patching. Used Webstart in the past (shit). Did consider getdown at one point but never got around to it. All we do now is just have a check run on the title screen that asks our server what the latest version of the game is and pops up a dialog to tell the player there's a newer version available.

As soon as Steam for Linux is ready I think we're going to totally ditch direct sales and downloads.

Cas Smiley

Offline pron

Junior Member


Medals: 4



« Reply #461 - Posted 2012-08-12 22:56:50 »

Could you please elaborate on Webstart's shortcomings?
Offline princec

JGO Kernel


Medals: 391
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #462 - Posted 2012-08-12 22:58:41 »

Yes, it's shit.

Cas Smiley

Offline kappa
« League of Dukes »

JGO Kernel


Medals: 77
Projects: 15


★★★★★


« Reply #463 - Posted 2012-08-12 22:58:56 »

Could you please elaborate on Webstart's shortcomings?
There is an article on the GetDown site about Webstarts shortcomings here.

IMO GetDown is much nicer and has proven to work well in several high profile Java games.
Offline jmart

Junior Member


Medals: 1



« Reply #464 - Posted 2012-08-12 23:00:17 »

Cas,

I like the games your company made.  Really liked how you did the electricity effect that I saw in the Revenage youtube video(@0.40).  Is there any information you can share about how you implemented it?

thanks
jose
Offline princec

JGO Kernel


Medals: 391
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #465 - Posted 2012-08-12 23:00:49 »

getdown is extremely simple and very robust. If I were to start implementing an auto patching system today, that's what I'd use.

Cas Smiley

Offline princec

JGO Kernel


Medals: 391
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #466 - Posted 2012-08-12 23:03:10 »

I like the games your company made.  Really liked how you did the electricity effect that I saw in the Revenage youtube video(@0.40).  Is there any information you can share about how you implemented it?
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
82  
83  
84  
85  
86  
87  
88  
89  
90  
91  
92  
93  
94  
95  
96  
97  
98  
99  
100  
101  
102  
103  
104  
105  
106  
107  
108  
109  
110  
111  
112  
113  
114  
115  
116  
117  
118  
119  
120  
121  
122  
123  
124  
125  
126  
127  
128  
129  
130  
131  
132  
133  
134  
135  
136  
137  
138  
139  
140  
141  
142  
143  
144  
145  
146  
147  
148  
149  
150  
151  
152  
153  
154  
155  
156  
157  
158  
159  
160  
161  
162  
163  
164  
165  
166  
167  
168  
169  
170  
171  
172  
173  
174  
175  
176  
177  
178  
179  
180  
181  
182  
183  
184  
185  
186  
187  
188  
189  
190  
191  
192  
193  
194  
195  
196  
197  
198  
199  
200  
201  
202  
203  
204  
205  
206  
207  
208  
209  
210  
211  
212  
213  
214  
215  
216  
217  
218  
219  
220  
221  
222  
223  
224  
225  
226  
227  
228  
229  
230  
231  
232  
233  
234  
235  
236  
237  
238  
239  
240  
241  
242  
243  
244  
245  
246  
247  
248  
249  
250  
251  
252  
253  
254  
255  
256  
257  
258  
259  
260  
261  
262  
263  
264  
265  
266  
267  
268  
269  
270  
271  
272  
273  
274  
275  
276  
277  
278  
279  
280  
281  
282  
283  
284  
285  
286  
287  
288  
289  
290  
291  
292  
293  
294  
295  
296  
297  
298  
299  
300  
301  
302  
303  
304  
305  
306  
307  
308  
309  
310  
311  
312  
313  
314  
315  
316  
317  
318  
319  
320  
321  
322  
323  
324  
325  
326  
327  
328  
329  
330  
331  
332  
333  
334  
335  
336  
337  
338  
339  
340  
341  
342  
343  
344  
345  
346  
347  
348  
349  
350  
351  
352  
353  
354  
355  
356  
357  
358  
359  
360  
361  
362  
363  
364  
365  
366  
367  
368  
369  
370  
371  
372  
373  
374  
375  
376  
377  
378  
379  
380  
381  
382  
383  
384  
385  
386  
387  
388  
389  
390  
391  
392  
393  
394  
395  
396  
397  
398  
399  
400  
401  
402  
403  
404  
405  
406  
407  
/*
 * Copyright (c) 2003-onwards Shaven Puppy Ltd
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 * * Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 *
 * * Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the distribution.
 *
 * * Neither the name of 'Shaven Puppy' nor the names of its contributors
 *   may be used to endorse or promote products derived from this software
 *   without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package worm.effects;

import java.util.ArrayList;

import net.puppygames.applet.Game;
import net.puppygames.applet.effects.Effect;
import net.puppygames.applet.effects.Emitter;
import net.puppygames.applet.effects.EmitterFeature;

import org.lwjgl.util.ReadableColor;
import org.lwjgl.util.ReadablePoint;
import org.lwjgl.util.Rectangle;

import worm.Entity;
import worm.GameMap;
import worm.Layers;
import worm.MapRenderer;
import worm.Tile;
import worm.Worm;
import worm.WormGameState;
import worm.screens.GameScreen;

import com.shavenpuppy.jglib.interpolators.Interpolator;
import com.shavenpuppy.jglib.interpolators.LinearInterpolator;
import com.shavenpuppy.jglib.interpolators.SineInterpolator;
import com.shavenpuppy.jglib.openal.ALBuffer;
import com.shavenpuppy.jglib.opengl.ColorUtil;
import com.shavenpuppy.jglib.opengl.GLRenderable;
import com.shavenpuppy.jglib.sound.SoundEffect;
import com.shavenpuppy.jglib.util.ShortList;
import com.shavenpuppy.jglib.util.Util;

import static org.lwjgl.opengl.GL11.*;

public class ElectronZapEffect extends Effect {

   private static final long serialVersionUID = 1L;

   /** Length of a segment */
   private static final int SEGMENT_LENGTH = 8;

   /** Zap fade out duration in ticks */
   private static final int FADE_DURATION = 15;

   /** Damage */
   private static final int DAMAGE_INTERVAL = 2;

   static final Interpolator INTERPOLATOR;
   static {
      INTERPOLATOR = new Interpolator() {
         private static final long serialVersionUID = 1L;

         @Override
         public float interpolate(float a, float b, float ratio) {
            if (ratio < 0.5f) {
               return SineInterpolator.instance.interpolate(a, b, ratio * 2.0f);
            } else {
               return SineInterpolator.instance.interpolate(a, b, 1.0f - (ratio - 0.5f) * 2.0f);
            }
         }
      };
   }

   private static final GLRenderable SETUP = new GLRenderable() {
      @Override
      public void render() {
         glDisable(GL_TEXTURE_2D);
         glEnable(GL_BLEND);
         glBlendFunc(GL_ONE, GL_ONE);
         glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
      }
   };

   private static final ArrayList<Entity> TEMP_ENTITIES = new ArrayList<Entity>();
   private static final Rectangle TEMP_RECT = new Rectangle();

   /** Rendering indices */
   private final ShortList indices = new ShortList(true, 32);

   private final float maxWidth;
   private final float maxWobble;
   private final float wobbleFactor;
   private final float widthFactor;
   private final boolean collides;

   private final EmitterFeature beamStartEmitter, beamEndEmitter;
   private final ALBuffer soundBuffer;

   private final ReadableColor color0, color1;
   private final int alpha;

   /** Source & target location */
   private final float sx, sy;
   private float tx, ty;

   /** Actual beam endpoint */
   private int x, y;

   /** Fading out */
   private boolean fading, done;

   /** Ticker */
   private int tick, soundTick, fadeSoundInTick;

   /** Segments */
   private float[] x0, y0, x1, y1, x2, y2, x3, y3;

   /** Current length (distance) */
   private int length;

   /** Number of segments */
   private int numSegments;

   /** Indices start and end */
   private int start, end, startPos, endPos;

   /** Sound effect */
   private SoundEffect soundEffect;

   public ElectronZapEffect
      (
         boolean collides,
         ALBuffer soundBuffer,
         ReadableColor color0,
         ReadableColor color1,
         int alpha,
         EmitterFeature beamStartEmitter,
         EmitterFeature beamEndEmitter,
         float sx,
         float sy,
         float maxWidth,
         float maxWobble,
         float wobbleFactor,
         float widthFactor
      )
   {
      this.collides = collides;
      this.soundBuffer = soundBuffer;
      this.color0 = color0;
      this.color1 = color1;
      this.alpha = alpha;
      this.beamStartEmitter = beamStartEmitter;
      this.beamEndEmitter = beamEndEmitter;
      this.sx = sx;
      this.sy = sy;
      this.maxWidth = maxWidth;
      this.maxWobble = maxWobble;
      this.wobbleFactor = wobbleFactor;
      this.widthFactor = widthFactor;
   }

   public void setTarget(float tx, float ty) {
      this.tx = tx;
      this.ty = ty;

      double dx = sx - tx;
      double dy = sy - ty;

      length = (int) Math.sqrt(dx * dx + dy * dy);
   }

   @Override
   protected void doUpdate() {
      ReadablePoint offset = getOffset();
      int ox, oy;
      if (offset == null) {
         ox = 0;
         oy = 0;
      } else {
         ox = offset.getX();
         oy = offset.getY();
      }

      // Calculate length & angle
     double dx = x - sx;
      double dy = y - sy;
      double tangent = Math.atan2(dy, dx) + Math.PI / 2.0;
      double dist = Math.sqrt(dx * dx + dy * dy);
      numSegments = (int) dist / SEGMENT_LENGTH + 1;
      if (x0 == null || x0.length < numSegments) {
         x0 = null;
         y0 = null;
         x1 = null;
         y1 = null;
         x2 = null;
         y2 = null;
         x3 = null;
         y3 = null;
         x0 = new float[numSegments];
         y0 = new float[numSegments];
         x1 = new float[numSegments];
         y1 = new float[numSegments];
         x2 = new float[numSegments];
         y2 = new float[numSegments];
         x3 = new float[numSegments];
         y3 = new float[numSegments];
      }
      for (int i = 0; i < numSegments; i ++) {
         float r2 = (float) i / (float) (numSegments - 1);
         double width = INTERPOLATOR.interpolate(0.0f, Math.min(maxWidth, i * widthFactor * SEGMENT_LENGTH), r2);
         double wobble = INTERPOLATOR.interpolate(0, Math.min(maxWobble, i * wobbleFactor * SEGMENT_LENGTH), r2);
         wobble *= Util.random() - 0.5;
         float xx = LinearInterpolator.instance.interpolate(sx, x, r2) + (float) (Math.cos(tangent) * wobble) + ox;
         float yy  = LinearInterpolator.instance.interpolate(sy, y, r2) + (float) (Math.sin(tangent) * wobble) + oy;
         x0[i] = xx - (float) (Math.cos(tangent) * width);
         y0[i] = yy - (float) (Math.sin(tangent) * width);
         x1[i] = xx + (float) (Math.cos(tangent) * width);
         y1[i] = yy + (float) (Math.sin(tangent) * width);
         x2[i] = xx - (float) (Math.cos(tangent) * (width + 1.0));
         y2[i] = yy - (float) (Math.sin(tangent) * (width + 1.0));
         x3[i] = xx + (float) (Math.cos(tangent) * (width + 1.0));
         y3[i] = yy + (float) (Math.sin(tangent) * (width + 1.0));
      }

      if (soundEffect != null) {
         soundEffect.setGain(Worm.calcGain(tx, ty) * Game.getSFXVolume() * soundBuffer.getGain(), this);
      }
   }

   @Override
   public void finish() {
      if (!fading) {
         fading = true;
         tick = 0;
      }
   }

   @Override
   protected void doTick() {
      tick ++;
      if (soundEffect != null && soundEffect.getOwner() != this) {
         // We lost the looping sound effect, so bring it back in a mo
        soundTick ++;
         if (soundTick >= FADE_DURATION) {
            soundEffect = Game.allocateSound(soundBuffer, 0.0f, 1.0f, this);
            fadeSoundInTick = FADE_DURATION;
         }
      }
      if (fading && soundEffect != null) {
         soundEffect.setGain(Math.max(0.0f, Math.min(1.0f, Worm.calcGain(tx, ty) * Game.getSFXVolume() * (1.0f - (float) tick / (float) FADE_DURATION) * soundBuffer.getGain())), this);
         return;
      }
      if (fadeSoundInTick > 0) {
         fadeSoundInTick --;
      }
      if (soundEffect != null) {
         soundEffect.setGain(Math.max(0.0f, Math.min(1.0f, Worm.calcGain(tx, ty) * Game.getSFXVolume() * (1.0f - (float) fadeSoundInTick / (float) FADE_DURATION) * soundBuffer.getGain())), this);
      }

      int totalLength = 0;
      if (collides) {
         WormGameState gameState = Worm.getGameState();
         x = (int) sx;
         y = (int) sy;
         GameMap map = gameState.getMap();
         int tileX = x / MapRenderer.TILE_SIZE;
         int tileY = y / MapRenderer.TILE_SIZE;

         int ox = x, oy = y;
         outer: for (int i = 0; i < length; i ++) {
            x = (int) LinearInterpolator.instance.interpolate(sx, tx, (float) i / (float) length);
            y = (int) LinearInterpolator.instance.interpolate(sy, ty, (float) i / (float) length);

            // Check map collision
           int newTileX = x / MapRenderer.TILE_SIZE;
            int newTileY = y / MapRenderer.TILE_SIZE;

            if (newTileX != tileX || newTileY != tileY) {
               tileX = newTileX;
               tileY = newTileY;

               for (int tileZ = 0; tileZ < GameMap.LAYERS; tileZ ++) {
                  Tile t = map.getTile(tileX, tileY, tileZ);
                  if (t != null && !t.isBulletThrough()) {
                     // Hit a wall
                    break outer;
                  }
               }
            }

            // Check collision with entities
           if (ox != x || oy != y) {
               TEMP_ENTITIES.clear();
               TEMP_RECT.setBounds(x, y, 1, 1);
               Entity.getCollisions(TEMP_RECT, TEMP_ENTITIES);
               int numEntities = TEMP_ENTITIES.size();
               for (int j = 0; j < numEntities; j ++) {
                  Entity entity = TEMP_ENTITIES.get(j);
                  if (entity.isActive() && entity.isShootable() && entity.canCollide()) {
                     if (tick % DAMAGE_INTERVAL == 0) {
                        entity.capacitorDamage(1);
                     } else {
                        entity.stunDamage(3);
                     }

                     // And here the beam stops.
                    break outer;
                  }
               }
               ox = x;
               oy = y;
            }
            totalLength ++;
         }
      } else {
         x = (int) tx;
         y = (int) ty;

      }
      if (!collides || totalLength > 0) {
         // Spawn sparks and ting at end of beam
        Emitter e = beamEndEmitter.spawn(GameScreen.getInstance());
         e.setLocation(x, y);
         e.setOffset(GameScreen.getSpriteOffset());
         Emitter e2 = beamStartEmitter.spawn(GameScreen.getInstance());
         e2.setLocation(sx, sy);
         e2.setOffset(GameScreen.getSpriteOffset());
      }
   }

   @Override
   public boolean isEffectActive() {
      return (!fading || tick < FADE_DURATION) && !done;
   }

   @Override
   protected void doRemove() {
      done = true;

      if (soundEffect != null) {
         soundEffect.stop(this);
         soundEffect = null;
      }
   }

   @Override
   protected void render() {
      if (!isStarted() || !isVisible()) {
         return;
      }
      glRender(SETUP);
      int endAlpha = fading ? (int) LinearInterpolator.instance.interpolate(255.0f, 0.0f, (float) tick / FADE_DURATION) : 255;

      indices.ensureCapacity(numSegments * 4);
      indices.clear();

      for (int i = 0; i < numSegments; i ++) {
         if (i == 0 || i == numSegments - 1) {
            ColorUtil.setGLColorPre(color0, 0, this);
         } else {
            ColorUtil.setGLColorPre(color0, endAlpha * alpha / 255, this);
         }
         indices.add(glVertex2f(x2[i], y2[i]));
         indices.add(glVertex2f(x3[i], y3[i]));
      }
      glRender(GL_TRIANGLE_STRIP, indices.toArray(null));

      indices.clear();
      ColorUtil.setGLColorPre(color1, endAlpha * alpha / 255, this);
      for (int i = 0; i < numSegments; i ++) {
         indices.add(glVertex2f(x0[i], y0[i]));
         indices.add(glVertex2f(x1[i], y1[i]));
      }
      glRender(GL_TRIANGLE_STRIP, indices.toArray(null));
   }

   @Override
   protected void doSpawnEffect() {
      soundEffect = Game.allocateSound(soundBuffer, 1.0f, 1.0f, this);
   }

   @Override
   public int getDefaultLayer() {
      return Layers.CAPACITOR_EFFECT;
   }
}


Cas Smiley

Offline coltonoscopy

Junior Member


Medals: 2



« Reply #467 - Posted 2012-08-12 23:18:21 »

Interpolators, electrons, and emitters, oh my! Cheesy

Straight flippin.
Offline jmart

Junior Member


Medals: 1



« Reply #468 - Posted 2012-08-12 23:20:48 »

hey thanks.  How often is doUpdate called?
Offline Cero
« Reply #469 - Posted 2012-08-13 01:00:38 »

getdown is extremely simple and very robust. If I were to start implementing an auto patching system today, that's what I'd use.

its just that my games all have the C++ games standard structure, exe files and folders with game content.
with getdown all game contents have to be in jars =/

Offline jmart

Junior Member


Medals: 1



« Reply #470 - Posted 2012-08-13 01:06:09 »

getdown is extremely simple and very robust. If I were to start implementing an auto patching system today, that's what I'd use.

its just that my games all have the C++ games standard structure, exe files and folders with game content.
with getdown all game contents have to be in jars =/

Cero are you trying to get a regular executable file for your java program?
Offline jmart

Junior Member


Medals: 1



« Reply #471 - Posted 2012-08-13 01:12:16 »

getdown is extremely simple and very robust. If I were to start implementing an auto patching system today, that's what I'd use.

its just that my games all have the C++ games standard structure, exe files and folders with game content.
with getdown all game contents have to be in jars =/

I've been in contact with a guy implementing a framework for auto-updating jars for an installed application and still have the executable functional.  He showed me a preview and it worked just like he said.  In your game the user would get some sort of message that there is an update available then if they click on it their game will be updated, with installer progress bar and everything.  He is probrably a few months off from finishing but I can put you in contact with him. 

thanks
jose
Offline princec

JGO Kernel


Medals: 391
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #472 - Posted 2012-08-13 08:30:50 »

Getdown can deliver any kind of file, not just jars.

One thing Oddlabs did back in the day was release using SVN. They had a SVN client built into Tribal Trouble. A very elegant and nifty solution but unfortunately SVN is mysteriously dog slow. That's the reason I've been looking in to GIT lately but I've been thwarted by beards who have tried to make GIT as unusably difficult as possible.

<sudden epiphany>Hmm. GIT would probably work quite well as a version delivery mechanism too.

Cas Smiley

Offline princec

JGO Kernel


Medals: 391
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #473 - Posted 2012-08-13 08:31:55 »

hey thanks.  How often is doUpdate called?
Every frame update, which is usually every tick, which is usually 60Hz.

Cas Smiley

Offline delt0r

JGO Knight


Medals: 27
Exp: 18 years


Computers can do that?


« Reply #474 - Posted 2012-08-13 10:02:53 »

WRT Git. If you use just the subset most projects use its pretty straightforward. However it has a *lot* of stuff in there pretty close to the surface which is really just for projects like the Linux kernel.  Also a lot of the git people that help *are* kernel folks, pushing this odd and complicated stuff even closer to the surface...   

I have no special talents. I am only passionately curious.--Albert Einstein
Offline princec

JGO Kernel


Medals: 391
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #475 - Posted 2012-08-13 10:25:52 »

Aye, hence looking at Mercurial right now. I still don't get why even simply installing the bastard serverside part has to be so hard. Linux is shit. Damn the beards.

Cas Smiley

Offline Roquen
« Reply #476 - Posted 2012-08-13 10:33:54 »

Consider hiring a bearded kid...could be cheaper than wasting time yourself.
Offline princec

JGO Kernel


Medals: 391
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #477 - Posted 2012-08-13 10:38:39 »

I think I might need to understand this absolutely fully myself before entrusting it to someone foolish enough to work for me.

Cas Smiley

Offline delt0r

JGO Knight


Medals: 27
Exp: 18 years


Computers can do that?


« Reply #478 - Posted 2012-08-13 11:04:49 »

Quote
Linux is shit.

OS Flamewar!!!

Haven't had one of those for ages.

But in truth i don't understand? Install what server where? If you mean for use with windows, then well yea git has never worked well on windows. At least the few times i tried.

I use git, but don't run any git server.

I have no special talents. I am only passionately curious.--Albert Einstein
Offline princec

JGO Kernel


Medals: 391
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #479 - Posted 2012-08-13 11:12:26 »

I think here we are bumping into on of my fundamental misunderstandings Smiley How do Chaz, myself and Allicorn work together with git? At the very least I want a fully-backed up canonical representation of the status quo on my server somewhere which is what we're all ultimately working against.

Cas Smiley

Pages: 1 ... 14 15 [16] 17 18
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

Pippogeek (39 views)
2014-09-24 16:13:29

Pippogeek (30 views)
2014-09-24 16:12:22

Pippogeek (20 views)
2014-09-24 16:12:06

Grunnt (45 views)
2014-09-23 14:38:19

radar3301 (28 views)
2014-09-21 23:33:17

BurntPizza (64 views)
2014-09-21 02:42:18

BurntPizza (34 views)
2014-09-21 01:30:30

moogie (42 views)
2014-09-21 00:26:15

UprightPath (50 views)
2014-09-20 20:14:06

BurntPizza (54 views)
2014-09-19 03:14:18
List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50

List of Learning Resources
by SilverTiger
2014-07-31 16:26:06

List of Learning Resources
by SilverTiger
2014-07-31 11:54:12

HotSpot Options
by dleskov
2014-07-08 01:59:08
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!