News:

Printed Amstrad Addict magazine announced, check it out here!

Main Menu
avatar_STE86

Ikari Warriors loading screen

Started by STE86, 22:11, 27 August 15

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

STE86

Having been inspired by a youtube vid which stated that arguably the best 8bit version of the game had by far the worst loading screen, I did this over the last couple of days, in payback for using the amstrad GnG loading screen as the basis for the new c64 GnG arcade loader.

if you want to attach it to a tape/disk image feel free.

Steve

[attachimg=1]

TotO

Great picture!  8)
By the way, the hanging gun strap look strange...
"You make one mistake in your life and the internet will never let you live it down" (Keith Goodyer)

Carnivius

Beautifully done.  I'm not even that into the game and I think this looks great.   Loving the metallic effect on the elite logo too.  :)
Favorite CPC games: Count Duckula 3, Oh Mummy Returns, RoboCop Resurrection, Tankbusters Afterlife

||C|-|E||

This is actually a great job! I remember the original screen as particularly horrible! we should exchange it for this one in the DSK  :D

Guy0me

Quote from: STE86 on 22:11, 27 August 15
Having been inspired by a youtube vid which stated that arguably the best 8bit version of the game had by far the worst loading screen, I did this over the last couple of days, in payback for using the amstrad GnG loading screen as the basis for the new c64 GnG arcade loader.
if you want to attach it to a tape/disk image feel free.

Steve
Beautiful !! we are waiting for the game with this in a dsk  ;D with french fries and a coke ..

Morri

Nice! I've just been reading up on another Ikari screen by @darkgate here in the last couple of days. Both great efforts as I know how long these artworks can take.
I really like the little additions of this one like the bunker in behind the bushes and metallic effect on the words.
Keeping it Kiwi since 1977

Gryzor


tastefulmrship

#7
Well, as someone who has converted his fair share of STE's C64 screens to the CPC palette (for which I am eternally apologetic due to a complete lack of permission... ahem!), all I would do is change the CYAN (#10) to WHITE (#13) and the yellow edges of the word "WARRIORS" to the new WHITE (#13) colour.

Other than those personal touches (from someone with NO graphic or artistic talent at all), this screen just proves that the CPC screen layout and palette is FAR, FAR superior to the C64. (Except in regards to GREY shades!) Once again, an amazing pixellated masterpiece from the master of pixels!  10/10



EDIT:
In all seriousness, though, with the GHOST AND GOBLINS and COMMANDO reworks, these new arcade title screens are getting the proper pixellation they deserve!

DARKGATE

#8
 :o 8) Great work, please can you explain me the program wich you have used for made it?
Compliments!!!
Ah please made a version .cdt and .dsk with this screen, if possible someone made a version .cdt with standard loading  block  with speed write 1 and 0  ;D .
Victory Road screen and still incomplete hope of made a good work, also if don't think of to arrive to this quality. ;)
Do not underestimate the power of AMSTRAD CPC.

STE86

the image was created in photoshop CS2 with all the antialiasing turned off.

using 160x200 res with 2:1 pixel aspect ratio turned on. and an amstrad full palette loaded.

I do c64 art in the same manner using a different palette but in the c64 case I have to use some photoshop scripting software to check for attribute limitations.

Steve

DARKGATE

 :( PHOTOHOP CS2 i have only photoshop 6 my computer is very old, i use many photoshop how you made for made the same palette of amstrad? work with photoshop can help me for a fast and more accurate work.
Thank you Steve.
Do not underestimate the power of AMSTRAD CPC.

Carnivius

Quote from: DARKGATE on 07:48, 29 August 15
:( PHOTOHOP CS2 i have only photoshop 6 my computer is very old, i use many photoshop how you made for made the same palette of amstrad? work with photoshop can help me for a fast and more accurate work.
Thank you Steve.

You don't need the latest graphics software for CPC pixelling, silly.   I use Paint Shop Pro 7 most of the time which is about 15 years old (but thankfully still works without issue on modern Windows) because it does all I want out of a graphics program and it's fast and doesn't use much memory (versions after that got a bit too Photoshoppy for my tastes). 
Favorite CPC games: Count Duckula 3, Oh Mummy Returns, RoboCop Resurrection, Tankbusters Afterlife

robcfg

I do use GIMP with custom aspect ratio.

Here's a loading screen I did for a Dragon 32 game:

VincentGR

One of the top 5 cpc games for me.
This artwork is awesome.

STE86

#14
Photoshop CS2 isnt the latest version by any means, its 10 years old and can be downloaded legally for FREE here (make a note of the serial number in the publisher details)

Adobe Photoshop CS2 Download - TechSpot

The PC version will run on all windows quite happily AFAIK I have used it on XP and 7. the Mac version only runs on older OS's

As the post above states Gimp will also do 2:1 aspect ratio, layers and is also free.

Pretty much any app that can do 2:1 fat pixel mode, can import palettes and has "layers" is perfect for 8 bit as long as you can turn off all the modern "help" it offers

I opt for photoshop because I am familiar with it as I use it for the "day job" :)

Love the Buzzard Bait screen. remember the game well. I had a dragon for 2 years '83-85 before defecting to the c64. A good mate of mine used to program Dragon games when I first met him. Dave Gibbons. We went on to do ST and Amiga stuff together.

Puresox

Not the right thread this , so if anyone has a quick answer so not to distort the thread too much. In relation to the Dragon and it being very similar to the CoCo , for what reason is it not compatible with the similar hardware? It seems like it would have made better sense to be compatible? Or was it part of the condition between the two companies?

DARKGATE

#16
 ;D victory road screen is near to complete, look the thread, thank you.
victory road new screen beta
Do not underestimate the power of AMSTRAD CPC.

alex76gr

Excellent job.
It looks fantastic. :)
Thank you!
I still believe that i got my myopia from the green GT-65 monitor, but i can't prove it! :)

STE86

Quote from: Puresox on 14:18, 29 August 15
Not the right thread this , so if anyone has a quick answer so not to distort the thread too much. In relation to the Dragon and it being very similar to the CoCo , for what reason is it not compatible with the similar hardware? It seems like it would have made better sense to be compatible? Or was it part of the condition between the two companies?

it was too a greater degree compatible with the coco 1, requiring only minor tweaks to get sw running between the two. 90% of the best dragon games were licensed coco ones. problem with the coco compatibility is that there were 3 versions of it :)

Some hardware I know ran because I remember plugging Tandy coco carts (some invaders game and "polaris") into my dragon (the foolishness of youth :) ) and they both worked and didnt blow the machine up...

Devilmarkus

Quote from: STE86 on 22:11, 27 August 15
Having been inspired by a youtube vid which stated that arguably the best 8bit version of the game had by far the worst loading screen, I did this over the last couple of days, in payback for using the amstrad GnG loading screen as the basis for the new c64 GnG arcade loader.

if you want to attach it to a tape/disk image feel free.

Steve

[attachimg=1]

Made a DSK of it...
Hope you like it!
When you put your ear on a hot stove, you can smell how stupid you are ...

Amstrad CPC games in your webbrowser

JavaCPC Desktop Full Release

DARKGATE

Thank you DEVILMARKUS, when you can please made a .cdt version (Classical standard loader) speed write 1 and 0   :D i love classical loader.
Do not underestimate the power of AMSTRAD CPC.

Devilmarkus

When you put your ear on a hot stove, you can smell how stupid you are ...

Amstrad CPC games in your webbrowser

JavaCPC Desktop Full Release

CECPC


Gryzor

Loading this right now. Oh, the sweet screeching sounds...

CECPC

I have made a 2 hours code to convert a PNG of 160x200 resolution into CPC hex data (16 KBytes) and the colors of the palette for INK.

I have paste the screen hex data into WinAPE data to a fast transfer.

It could be useful next time.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace PNG2CPC
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private byte getNearCPCOneColor(byte one)
        {
            // En el CPC original hay 3 niveles de luminosidad por cada canal de color.
            // Canal apagado, canal a liminosidad intermedia, y canal a liminosidad total.
            // 3 canales (RGB=Red Green Blue), en tres posiciones diferentes = 3^3= 27 colores
            // Los niveles son: 0, 0x80 y 0xFF. Yo tomo como referencia de proximidad los intermedios
            // <=0x40 = 0, >0x40-<0xC0 = 0x80 >=0xC0 = 0xFF
            if (one <= 0x40) return 0;
            if (one < 0xC0) return 0x80;
            return 0xFF;
        }

        private Color getNearCPCColor(Color rgb)
        {
            byte r = getNearCPCOneColor(rgb.R);
            byte g = getNearCPCOneColor(rgb.G);
            byte b = getNearCPCOneColor(rgb.B);
            return Color.FromArgb(0xff, r, g, b);
        }

        byte[] bufferScreen = null;
        byte[] byteCpcPallete = new byte[16];

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "PNG Files|*.png";
            if (ofd.ShowDialog() != DialogResult.OK) return;
            Bitmap b = new Bitmap(ofd.FileName);
            List<Color> cpcColorImg = new List<Color>();
            for (int w = 0; w < b.Width; w++)
            {
                for (int h = 0; h < b.Height; h++)
                {
                    Color c = b.GetPixel(w, h);
                    Color cpcColor = getNearCPCColor(c);
                    if (!cpcColorImg.Contains(cpcColor))
                    {
                        cpcColorImg.Add(cpcColor);
                    }
                }
            }
            if (cpcColorImg.Count > 16)
            {
                MessageBox.Show("The image has " + cpcColorImg.Count.ToString() + " colors. It can not be converted.");
                return;
            }
            cpcColorImg.Sort(delegate(Color p1, Color p2)
                {
                    if (p1.GetBrightness() < p2.GetBrightness()) return -1;
                    if (p1.GetBrightness() > p2.GetBrightness()) return 1;
                    return 0;
                }
            );
            //Como excepción, quieron que el PEN 1 tenga un color con mucho brillo.
            int posMax = cpcColorImg.Count - 1;
            Color cMax = cpcColorImg[posMax];
            Color c1 = cpcColorImg[1];
            cpcColorImg[1]=cMax;
            cpcColorImg[posMax] = c1;

            Dictionary<int, byte> cpcPallete = new Dictionary<int, byte>();
            Dictionary<Color, int> colorToPen = new Dictionary<Color, int>();
            cpcColorImg.ForEach(delegate(Color c)
            {
                int pen = cpcPallete.Count;
                byte cpcColorPallete = getCpcColorPallete(c);
                colorToPen.Add(c, pen);
                cpcPallete.Add(pen, cpcColorPallete);
                byteCpcPallete[pen] = cpcColorPallete;
            });
            // Ahora toca pasar de gráfico PNG a bytes para pantalla CPC
            // Recorremos 8 las bandas del CPC, para alinearlas a memoria
            // Como modo 0, leemos de 2 en 2 pixels, y lo convertimos a un byte
            int nlineas = b.Height >> 3;
            int columns = b.Width >> 1;

            bufferScreen=new byte[0x4000];

            int bufferPos = 0;
            for (int pas = 0; pas < 8; pas++)
            {
                bufferPos = pas * 0x800;
                for (int linea = 0; linea < nlineas; linea++)
                {
                    for (int column=0; column < columns; column++)
                    {
                        int lineaReal = linea * 8 + pas;
                        int columnPixe = column * 2;
                        Color nearColor1 = getNearCPCColor(b.GetPixel(columnPixe, lineaReal));
                        Color nearColor2 = getNearCPCColor(b.GetPixel(columnPixe+1, lineaReal));
                        int penPixel1 = colorToPen[nearColor1];
                        int penPixel2 = colorToPen[nearColor2];
                        byte byteMode0 = (byte)(
                            getBitPerPower(penPixel1, 0, 7) ^
                            getBitPerPower(penPixel2, 0, 6) ^
                            getBitPerPower(penPixel1, 2, 5) ^
                            getBitPerPower(penPixel2, 2, 4) ^
                            getBitPerPower(penPixel1, 1, 3) ^
                            getBitPerPower(penPixel2, 1, 2) ^
                            getBitPerPower(penPixel1, 3, 1) ^
                            getBitPerPower(penPixel2, 3, 0));
                        bufferScreen[bufferPos++] = byteMode0;
                    }
                }
            }

        }

        private byte getBitPerPower(int penPixel2, byte bitOrig, byte bitDest)
        {
            bool pixelOn = (penPixel2 & (1 << bitOrig)) != 0;
            return (byte)(pixelOn ? 1 << bitDest : 0);
        }

        private byte getCpcOneColorPalleteSub(byte c)
        {
            byte c2 = getNearCPCOneColor(c);
            if (c2 == 0) return 0;
            if (c2 == 0x80) return 1;
            return 2;

        }

        private byte getCpcColorPallete(Color c)
        {
            byte r = getCpcOneColorPalleteSub(c.R);
            byte g = getCpcOneColorPalleteSub(c.G);
            byte b = getCpcOneColorPalleteSub(c.B);
            return (byte)(b + r * 3 + g * 9);
        }

        private int getIntColor(Color cpc)
        {
            int intColor = cpc.R * 0x10000 + cpc.G * 0x100 + cpc.B;
            return intColor;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (bufferScreen == null)
            {
                MessageBox.Show("The screen has not been readed yet");
                return;
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < bufferScreen.Length; i++)
            {
                if (i > 0) sb.Append(' ');
                sb.Append(bufferScreen[i].ToString("X2"));
            }
            Clipboard.SetText(sb.ToString());
            MessageBox.Show("The hex data of the screen has been copied into clipboard");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (bufferScreen == null)
            {
                MessageBox.Show("The screen has not been readed yet");
                return;
            }
            StringBuilder sb = new StringBuilder();
            sb.Append("DB ");
            for (int i = 0; i < byteCpcPallete.Length; i++)
            {
                if (i > 0) sb.Append(',');
                sb.Append(byteCpcPallete[i].ToString());
            }
            Clipboard.SetText(sb.ToString());
            MessageBox.Show("Assembler of the palette copy to clipboard");
        }
    }
}


Powered by SMFPacks Menu Editor Mod