This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Pages: « 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 »
1801
Function Peer Review / Re: GML: draw_sprite_tiled_area + draw_sprite_tiled_area_ext (Custom, not in GM)
« on: October 16, 2010, 04:58:57 pm »
They are free to use, modify and redistribute, so there is really no license involved. You don't even have to give credit, but you could if you were kind enough. I do understand the math behind all this, so I could make them from scratch, but they would look almost exactly like these. Its just that there are aren't so many ways to invent the wheel... I could make them more messy and less optimized if you want. Then they would be custom made for sure. And I am pretty sure these can't be optimized any more, because gmlscript.com usually hold only the most optimized code. Thou here we could change float to int, thus creating an (substantial?) speed increase, because I don't see why width, height or position should be decimal.. Thou you have made all positions and sizes in all functions floats for some reason. I know that GM allows x and y to be a decimal, but I don't get why. You cant have something 1.5 pixels from somewhere. Its a lot better if is 1 or 2 pixels.
Hope you understand this post. It seems I have written a lot and said so little.
Hope you understand this post. It seems I have written a lot and said so little.
1802
Proposals / Re: Images
« on: October 01, 2010, 04:46:21 am »Quote
The checkbox is retained for backwards compatibility during export.Ou right. I forgot LGM allows saving to pre-GM8 file formats too. In that case there is no other way I guess.
Quote
There is a properties file which specifies the image editor to use.I am not able to find that file. Do I need to create it if it doesn't exist?
1803
Proposals / Re: Images
« on: September 30, 2010, 03:16:39 pm »Quote
@First paragraphBug is that it "fills" the transparency color on load and thus leaving some ugly artifacts (as far as I understood). What I was suggesting is to remove the "transparent' tickbox, as well making the sprite_add function act more like in GM8 (no "transparency" argument, but "removeback"). Thou as the function itself isn't done yet, then I guess we don't need to think about that yet.
This is a bug I reported to Ism. Your paragraph contains exactly the same suggestion mine did.
Quote
The exe actually contains Zlib-compressed RGBA. Which is basically simplified PNG. You are correct that sprite_add only uses bitmap. I didn't want to incorporate sizey formats until I had a way of allowing the user to disable them. This will require such libraries as libPNG, libTIFF, and libJPG.Ok. So I will just have to wait and see. I could try incorporating libPNG and libJPG, but as I am not an official developer I better not. Maybe for my own personal use until its officially in.
Quote
I'll leave that to Ism. Praps post a suggestion on the tracker; this forum is more for large system proposals.I will maybe add that ticket, but as I said, I guess lots of those parts are not ready, and if Ism wants to work on other, maybe more serious things, then we should let her.
1804
I was messing round and found that LGM uses both, image alpha AND transparency color. Using both of them in the same time seems redundant and messy. I was going to suggest going the way GM8 did. Remove transparent attribute and everything that is connected to that. So have only alpha support and if someone wants to remove background color, then he just deletes that before importing (or in GM8 case, in the built-in editor). If <GM8 file is imported, then it checks if the transparency color is used, and if so, then just replaces the transparency color with 0 alpha. Its how GM8 does it.
Also, Enigma seem to save images in the exe using RGBA bitmap. So it takes a lot of space, shouldn't some compressed lossless format be used instead? Like .png? And what about Enigmas image file support? sprite_add seem to load only .bmp files. GM8 can load tens of formats as far as I know, and even if some of them are useless, I would love to use some. Like the stated .png. In every project I use external resources and for compression sake they are usually png and in some cases .jpg (where some quality loss is acceptable).
You could use some free C++ image library. Quick search revealed me http://cimg.sourceforge.net/. Although reading about I found it only supports 8 formats natively, and some of them are ASCII files. So I guess it can't be useful. It can be extended with (png's, jpges and lots of others) imagemagik. Some other project might be more useful thou.
Also, I know that LGM sprite functionality is far from finished (or is it?), but I must ask for some additions/changes to be made more prompt than others. For example, you can only select one image in the load dialog. This is something similar to GM, but it also has Add Image and Add from strip buttons, which allows selecting other files too. Because now I can't add an animation which consists of several .png images. I can only add one. The second problem is that I can't paste into new frames. So in GM I usually just pasted image from a graphics program every time I changed it. Like selecting one frame, and then pasting the image and it added the image after the selected frame. Then I deleted the old one and that was it. In LGM you can "Add new frame", but that just adds a white frame to the sprite. You can't modify it in any way (as far as I know).
Also, Enigma seem to save images in the exe using RGBA bitmap. So it takes a lot of space, shouldn't some compressed lossless format be used instead? Like .png? And what about Enigmas image file support? sprite_add seem to load only .bmp files. GM8 can load tens of formats as far as I know, and even if some of them are useless, I would love to use some. Like the stated .png. In every project I use external resources and for compression sake they are usually png and in some cases .jpg (where some quality loss is acceptable).
You could use some free C++ image library. Quick search revealed me http://cimg.sourceforge.net/. Although reading about I found it only supports 8 formats natively, and some of them are ASCII files. So I guess it can't be useful. It can be extended with (png's, jpges and lots of others) imagemagik. Some other project might be more useful thou.
Also, I know that LGM sprite functionality is far from finished (or is it?), but I must ask for some additions/changes to be made more prompt than others. For example, you can only select one image in the load dialog. This is something similar to GM, but it also has Add Image and Add from strip buttons, which allows selecting other files too. Because now I can't add an animation which consists of several .png images. I can only add one. The second problem is that I can't paste into new frames. So in GM I usually just pasted image from a graphics program every time I changed it. Like selecting one frame, and then pasting the image and it added the image after the selected frame. Then I deleted the old one and that was it. In LGM you can "Add new frame", but that just adds a white frame to the sprite. You can't modify it in any way (as far as I know).
1805
Proposals / Re: LGM themes (Warning: Images)
« on: September 28, 2010, 01:51:31 pm »Quote
Until such an option exists, you could see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html and try:I tried that swing.properties file method, and it didn't work for me. Thou its probably because I did something wrong, or that I didn't even find the right directory to put it in.
java -Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel MyApp
Not sure if this works for LGM, but it if doesn't, I'll have to ask the LGM devs to support it until a better solution comes along.
1806
Function Peer Review / GML: draw_sprite_general
« on: September 28, 2010, 01:36:00 pm »
Description:This function was already present in Enigma, but it was just copied draw_sprite_part code, and so didn't feature scale or rotation. This function does, so every argument is used. This function also has 3 more arguments then the original, so its possible to change alpha for every corner, not only color. I don't know if this is needed (for example, for compatibility with GM), and so if dev's think it doesn't suit it, then they can remove those arguments.
Function:
draw_sprite_general(int spr,int subimg,double left,double top,double width,double height,double x,double y,double xscale,double yscale,double rot,int c1,int c2,int c3,int c4,double a1, double a2, double a3, double a4)
Code:
Function:
draw_sprite_general(int spr,int subimg,double left,double top,double width,double height,double x,double y,double xscale,double yscale,double rot,int c1,int c2,int c3,int c4,double a1, double a2, double a3, double a4)
Code:
Code: [Select]
int draw_sprite_general(int spr,int subimg,double left,double top,double width,double height,double x,double y,double xscale,double yscale,double rot,int c1,int c2,int c3,int c4,double a1, double a2, double a3, double a4)
{
enigma::sprite *spr2d=enigma::spritestructarray[spr];
if (!spr2d)
return -1;
glPushAttrib(GL_CURRENT_BIT);
if (enigma::cur_bou_tha_noo_sho_eve_cha_eve != spr2d->texturearray[subimg % spr2d->subcount])
{
glBindTexture(GL_TEXTURE_2D,spr2d->texturearray[subimg % spr2d->subcount]);
enigma::cur_bou_tha_noo_sho_eve_cha_eve=spr2d->texturearray[subimg % spr2d->subcount];
}
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
const float tbx=spr2d->texbordx,tby=spr2d->texbordy,
w=width*xscale, h=height*yscale,
tbw=spr2d->width/tbx,tbh=spr2d->height/tby;
rot *= M_PI/180;
float ulcx = x + xscale * cos(M_PI+rot) + yscale * cos(M_PI/2+rot),
ulcy = y - yscale * sin(M_PI+rot) - yscale * sin(M_PI/2+rot);
glBegin(GL_QUADS);
glColor4ub(__GETR(c1),__GETG(c1),__GETB(c1),char(a1*255));
glTexCoord2f(left/tbw,top/tbh);
glVertex2f(ulcx,ulcy);
glColor4ub(__GETR(c2),__GETG(c2),__GETB(c2),char(a2*255));
glTexCoord2f((left+width)/tbw,top/tbh);
glVertex2f((ulcx + w*cos(rot)), (ulcy - w*sin(rot)));
ulcx += h * cos(3*M_PI/2 + rot);
ulcy -= h * sin(3*M_PI/2 + rot);
glColor4ub(__GETR(c3),__GETG(c3),__GETB(c3),char(a3*255));
glTexCoord2f((left+width)/tbw,(top+height)/tbh);
glVertex2f((ulcx + w*cos(rot)), (ulcy - w*sin(rot)));
glColor4ub(__GETR(c4),__GETG(c4),__GETB(c4),char(a4*255));
glTexCoord2f(left/tbw,(top+height)/tbh);
glVertex2f(ulcx,ulcy);
glEnd();
glPopAttrib();
return 0;
}
1807
Function Peer Review / Re: GML: All draw_background functions + 2 custom ones
« on: September 28, 2010, 12:56:26 pm »
Ou thats what enigma::cur_bou_tha_noo_sho_eve_cha_eve is for. For some reason that variable didn't make much sense when it consisted of 8 shortened words(!?).
So I added that and now it is fixed. I reuploaded the attachment.
So I added that and now it is fixed. I reuploaded the attachment.
1808
Function Peer Review / GML: All draw_background functions + 2 custom ones
« on: September 28, 2010, 12:05:55 pm »
Description: These are all draw_background functions in GM. They are exactly the same except draw_background_general, which has 3 more arguments. It allows not only color for each individual corner, but also alpha. There are also 2 custom functions. draw_background_tiled_area and draw_background_tiled_area_ext which tiles background over a specific region.
Functions:
draw_background(int back, double x, double y);
draw_background_stretched(int back, double x, double y, double w, double h);
draw_background_tiled(int back,double x,double y);
draw_background_tiled_area(int back,double x,double y,double x1,double y1,double x2,double y2);
draw_background_part(int back,double left,double top,double width,double height,double x,double y);
draw_background_ext(int back,double x,double y,double xscale,double yscale,double rot,int color,double alpha);
draw_background_stretched_ext(int back,double x,double y,double w,double h,int color,double alpha);
draw_background_tiled_ext(int back,double x,double y,double xscale,double yscale,int color,double alpha);
draw_background_tiled_area_ext(int back,double x,double y,double x1,double y1,double x2,double y2, double xscale, double yscale, int color, double alpha);
draw_background_part_ext(int back,double left,double top,double width,double height,double x,double y,double xscale,double yscale,int color,double alpha);
draw_background_general(int back,double left,double top,double width,double height,double x,double y,double xscale,double yscale,double rot,int c1,int c2,int c3,int c4,double a1,double a2,double a3,double a4);
As the code itself would be too long to post here, I just added GSbackground.h and GSbackground.cpp as attachments.
Note, there is a bug in that sprite functions will draw a background after one of these functions are called. I already posted a ticket, and when TGMG or Josh fixes that then I guess these functions will need a little upgrading. Also, while working on these functions I noticed that some of the sprite functions are incomplete too. Like draw_sprite_general doesn't use rotation argument. I will maybe change that too.
edit: "Bug" was solved. Redownload attachments.
Functions:
draw_background(int back, double x, double y);
draw_background_stretched(int back, double x, double y, double w, double h);
draw_background_tiled(int back,double x,double y);
draw_background_tiled_area(int back,double x,double y,double x1,double y1,double x2,double y2);
draw_background_part(int back,double left,double top,double width,double height,double x,double y);
draw_background_ext(int back,double x,double y,double xscale,double yscale,double rot,int color,double alpha);
draw_background_stretched_ext(int back,double x,double y,double w,double h,int color,double alpha);
draw_background_tiled_ext(int back,double x,double y,double xscale,double yscale,int color,double alpha);
draw_background_tiled_area_ext(int back,double x,double y,double x1,double y1,double x2,double y2, double xscale, double yscale, int color, double alpha);
draw_background_part_ext(int back,double left,double top,double width,double height,double x,double y,double xscale,double yscale,int color,double alpha);
draw_background_general(int back,double left,double top,double width,double height,double x,double y,double xscale,double yscale,double rot,int c1,int c2,int c3,int c4,double a1,double a2,double a3,double a4);
As the code itself would be too long to post here, I just added GSbackground.h and GSbackground.cpp as attachments.
Note, there is a bug in that sprite functions will draw a background after one of these functions are called. I already posted a ticket, and when TGMG or Josh fixes that then I guess these functions will need a little upgrading. Also, while working on these functions I noticed that some of the sprite functions are incomplete too. Like draw_sprite_general doesn't use rotation argument. I will maybe change that too.
edit: "Bug" was solved. Redownload attachments.
1809
Function Peer Review / Re: Instance Interface How-to
« on: September 28, 2010, 02:43:36 am »Quote
Try now (remember to recompile the compiler, so delete the .dll file, lgm will compile it for you when the dll file is missing), atm its still quite basic.Great work. I will make those functions when I get home.
1810
Function Peer Review / Re: Instance Interface How-to
« on: September 27, 2010, 03:43:24 pm »
I see that TGMG added some basic background support. This will allow me to make all of the background functions. Thou I downloaded the newest from SVG, then recompiled, but I still don't see draw_background() function even thou its in GSbackground.cpp. I guess LGM needs to be updates as well? If so, then I will wait.
1811
Function Peer Review / Re: Networking on GitHub
« on: September 26, 2010, 09:00:13 am »
Ok, I agree.
Also, I didn't imply that you need to write directplay version for Enigma (so it would be as bad as GM one, and so what would be the point?). I just meant that it would be good if functions remained, like mplay_data_write(ind,val), mplay_data_read(ind) and so on. It wouldn't matter what the underlying system is. But as noone used mplay_, then I guess its better to make another system, and net_ prefix suits it.
Also, I didn't imply that you need to write directplay version for Enigma (so it would be as bad as GM one, and so what would be the point?). I just meant that it would be good if functions remained, like mplay_data_write(ind,val), mplay_data_read(ind) and so on. It wouldn't matter what the underlying system is. But as noone used mplay_, then I guess its better to make another system, and net_ prefix suits it.
1812
Function Peer Review / Re: Function Peer Review Board
« on: September 26, 2010, 08:54:41 am »Quote
text functions don't exist because fonts aren't implemented yet. If you want to build on top of them, feel free, just make a dummy draw_text function to build on top of.I thought there was draw_text.. I think I even used it before. Thou it doesn't work now (it doesn't trow an error either). So I guess I will need to wait a little.
Quote
Also, console_show_message().Do I need to declare it somewhere? Because it won't work if I just use it in a function. Anyhow, print and prinf does suffice. Also, when background are going to be in? If you could implement it and make a draw_background function, then I will do all the rest of them.
1813
Function Peer Review / Re: Function Peer Review Board
« on: September 25, 2010, 01:02:42 pm »
Thanks for the information. It works.
Edit: Now I just have to wait until backgrounds are in so I can make all of those functions too.
Edit2: And where are draw_text function? I can't find it anywhere. I wanted to make text functions (I know fonts are not implemented yet, but stuff like scaling etc, should be possible).
Edit: Now I just have to wait until backgrounds are in so I can make all of those functions too.
Edit2: And where are draw_text function? I can't find it anywhere. I wanted to make text functions (I know fonts are not implemented yet, but stuff like scaling etc, should be possible).
1814
Function Peer Review / GML: draw_sprite_tiled_area + draw_sprite_tiled_area_ext (Custom, not in GM)
« on: September 25, 2010, 12:58:45 pm »
Notice: These functions are not in GM. They are just additional functions that could be useful to add. What they do is that they tile a sprite over selected region (which is a rectangle with x1,y1 top left corner and x2,y2 bottom left). It automatically crops the image as needed and it works with any size sprite. They are based on GMLScripts script http://www.gmlscripts.com/script/draw_sprite_tiled_area by EyeGuy.
Function: draw_sprite_tiled_area(int spr,int subimg,double x,double y,double x1,double y1,double x2,double y2);
GSsprite.h:
GSsprite.cpp:
Function: draw_sprite_tiled_area_ext(int spr,int subimg,double x,double y,double x1,double y1,double x2,double y2, double xscale, double yscale, int color, double alpha);
GSsprite.h:
GSsprite.cpp:
Added attachments show:
First image: draw_sprite_tiled_area(sprite0,0,0,0,75,75,375,375);
Second image: draw_sprite_tiled_area_ext(sprite0,0,0,0,75,75,375,375,0.5,0.5,c_yellow,0.7);
You can see some artifacts when scaled down, but I guess it is normal.
Function: draw_sprite_tiled_area(int spr,int subimg,double x,double y,double x1,double y1,double x2,double y2);
GSsprite.h:
Code: [Select]
int draw_sprite_tiled_area(int spr,int subimg,double x,double y,double x1,double y1,double x2,double y2);
GSsprite.cpp:
Code: [Select]
int draw_sprite_tiled_area(int spr,int subimg,double x,double y,double x1,double y1,double x2,double y2)
{
enigma::sprite *spr2d = enigma::spritestructarray[spr];
if (!spr2d)
return -1;
if (enigma::cur_bou_tha_noo_sho_eve_cha_eve != spr2d->texturearray[subimg % spr2d->subcount])
{
glBindTexture(GL_TEXTURE_2D,spr2d->texturearray[subimg % spr2d->subcount]);
enigma::cur_bou_tha_noo_sho_eve_cha_eve = spr2d->texturearray[subimg % spr2d->subcount];
}
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
glPushAttrib(GL_CURRENT_BIT);
glColor4f(1,1,1,1);
const float tbx=spr2d->texbordx,tby=spr2d->texbordy;
float sw,sh,i,j,jj,left,top,width,height,X,Y;
sw = spr2d->width;
sh = spr2d->height;
i = x1-(fmod(x1,sw) - fmod(x,sw)) - sw*(fmod(x1,sw)<fmod(x,sw));
j = y1-(fmod(y1,sh) - fmod(y,sh)) - sh*(fmod(y1,sh)<fmod(y,sh));
jj = j;
glBegin(GL_QUADS);
for(i=i; i<=x2; i+=sw) {
for(j=j; j<=y2; j+=sh) {
if(i <= x1) left = x1-i;
else left = 0;
X = i+left;
if(j <= y1) top = y1-j;
else top = 0;
Y = j+top;
if(x2 <= i+sw) width = ((sw)-(i+sw-x2)+1)-left;
else width = sw-left;
if(y2 <= j+sh) height = ((sh)-(j+sh-y2)+1)-top;
else height = sh-top;
glTexCoord2f(left/sw*tbx,top/sh*tby);
glVertex2f(X,Y);
glTexCoord2f((left+width)/sw*tbx,top/sh*tby);
glVertex2f(X+width,Y);
glTexCoord2f((left+width)/sw*tbx,(top+height)/sh*tby);
glVertex2f(X+width,Y+height);
glTexCoord2f(left/sw*tbx,(top+height)/sh*tby);
glVertex2f(X,Y+height);
}
j = jj;
}
glEnd();
glPopAttrib();
return 0;
}
Function: draw_sprite_tiled_area_ext(int spr,int subimg,double x,double y,double x1,double y1,double x2,double y2, double xscale, double yscale, int color, double alpha);
GSsprite.h:
Code: [Select]
int draw_sprite_tiled_area_ext(int spr,int subimg,double x,double y,double x1,double y1,double x2,double y2, double xscale, double yscale, int color, double alpha);
GSsprite.cpp:
Code: [Select]
int draw_sprite_tiled_area_ext(int spr,int subimg,double x,double y,double x1,double y1,double x2,double y2, double xscale, double yscale, int color, double alpha)
{
enigma::sprite *spr2d = enigma::spritestructarray[spr];
if (!spr2d)
return -1;
if (enigma::cur_bou_tha_noo_sho_eve_cha_eve != spr2d->texturearray[subimg % spr2d->subcount])
{
glBindTexture(GL_TEXTURE_2D,spr2d->texturearray[subimg % spr2d->subcount]);
enigma::cur_bou_tha_noo_sho_eve_cha_eve = spr2d->texturearray[subimg % spr2d->subcount];
}
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
glPushAttrib(GL_CURRENT_BIT);
glColor4ub(__GETR(color),__GETG(color),__GETB(color),char(alpha*255));
const float tbx=spr2d->texbordx,tby=spr2d->texbordy;
float sw,sh,i,j,jj,left,top,width,height,X,Y;
sw = spr2d->width*xscale;
sh = spr2d->height*yscale;
i = x1-(fmod(x1,sw) - fmod(x,sw)) - sw*(fmod(x1,sw)<fmod(x,sw));
j = y1-(fmod(y1,sh) - fmod(y,sh)) - sh*(fmod(y1,sh)<fmod(y,sh));
jj = j;
glBegin(GL_QUADS);
for(i=i; i<=x2; i+=sw) {
for(j=j; j<=y2; j+=sh) {
if(i <= x1) left = x1-i;
else left = 0;
X = i+left;
if(j <= y1) top = y1-j;
else top = 0;
Y = j+top;
if(x2 <= i+sw) width = ((sw)-(i+sw-x2)+1)-left;
else width = sw-left;
if(y2 <= j+sh) height = ((sh)-(j+sh-y2)+1)-top;
else height = sh-top;
glTexCoord2f(left/sw*tbx,top/sh*tby);
glVertex2f(X,Y);
glTexCoord2f((left+width)/sw*tbx,top/sh*tby);
glVertex2f(X+width,Y);
glTexCoord2f((left+width)/sw*tbx,(top+height)/sh*tby);
glVertex2f(X+width,Y+height);
glTexCoord2f(left/sw*tbx,(top+height)/sh*tby);
glVertex2f(X,Y+height);
}
j = jj;
}
glEnd();
glPopAttrib();
return 0;
}
Added attachments show:
First image: draw_sprite_tiled_area(sprite0,0,0,0,75,75,375,375);
Second image: draw_sprite_tiled_area_ext(sprite0,0,0,0,75,75,375,375,0.5,0.5,c_yellow,0.7);
You can see some artifacts when scaled down, but I guess it is normal.
1815
Function Peer Review / Re: Networking on GitHub
« on: September 25, 2010, 11:22:09 am »Quote
They are currently named mplay_ until we get a better name for them. They do not use DirectPlay (which GM uses) and we do not aim to create a reproduction of the mplay_ functionality.But mplay stands for "multiplayer" as far as I know. So you might as well call them mplay_. I think Enigma should at least replicate GM functions, so creating mplay_ functions with the same parameters would be nice. GM's multiplayer wasn't the best, so no one actually used it, but still. Good work on this thou, and I like the ftp functions. The more functionality there is, the better.
Pages: « 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 »