Hermosillo

inCreactive Personal Leave a Comment

 

I had the pleasure of visiting Hermosillo, Sonora. A relatively small city located on the northern part of Mexico, it has around 1 million inhabitants while Mexico City has around 21 million (I know, it’s crazy). This was my first time visiting and I had a great time. Life seemed much less stressful, there was not much traffic on the streets, the air didn’t look polluted and the according to Wikipedia, Hermosillo has a very high Human Development Index, over 9000 apparently 😉

I did noticed they had better city planning than Mexico City and even felt a bit a American at times. But the culture is definitely Mexican, beginning with their strong northern accent, which I really liked, the Banda on almost all the radio stations, their strong preference for the Tecate Light beer, their meat boutiques and overall excellent food, all the way to their really hot temperatures at noon, their great hospitality and beautiful women. It was a nice experience. I took this photo of the city from the top of El Cerro de la Campana (The Bell Hill) at sunset.

Napster Animations

inCreactive Flash, Personal Leave a Comment

Click here to see the Napster Animations fan page.  (You can watch them fullscreen if you click on the tv screen)

This is a small project my sister Berry and I worked on. It’s just a small way of paying tribute to this great saga of cool Napster animations from 2003. It all started a few weeks ago when I decided to watch a documentary on Netflix called Downloaded. As you probably guessed, it was about Napster, the famous peer-to-peer file sharing service that many of us had the privilege of using back in the day. It really brought back fond memories of me trying to download a full car 😉 back when I had a dial up connection and it would take ages but it would be so much worth it. Napster was the first of it’s kind, and arguably, one of the greatest inventions out there because it sparked a global revolution in the digital sharing of culture.

After watching the documentary, I also remembered that I had these animations laying around somewhere in an old hard drive. I didn’t actually downloaded them from the original Napster site, I found them somewhere else years later but I can’t find that site anymore. That’s one of the reasons I wanted to share them with the internet again, so that you can all watch them in their full SWF glory. The talented artist responsible for these awesome animations is Geoff McFetridge. The Canada, Japan, Jazz and Holiday 2003 animations were animated by David Elsensohn. These animations were used in a web and tv ad campaign back in 2003 to reintroduce Napster as an online music store, and reportedly, they were viewed by millions of people.

I’m a big fan of the simple style of design and animation, and if you add on top of that the fact that they don’t use any dialogs whatsoever and they still manage to tell clever and funny stories, it just makes them so much better. Unfortunally I’m still missing one animation where Napster breakdances called “Old School“, and there’s also 3 tv spots that I’ve never had the pleasure of watching. If anyone out there has them, I beg you, please share them with me.

As I said at the beginning, I did all the coding and my younger sister did all the design for this fan page. This is our first project working together and I think it went pretty well. It is a small project but we hope you enjoy watching the animations.

Guadalajara

inCreactive Personal Leave a Comment

Went on a small vacation to Guadalajara, the city where I was born and attended college in. This was the first time I took a trip by myself and I have to say, I enjoyed it a lot. Had a lot of time to think to myself. I did many things and saw a lot of places but one of the main reasons for my visit was to see Gesaffelstein play live, and of course, he gave a great show and I danced like crazy.

Another great surprise, and something I want to share with you guys, is the work of Maximino Javier, a Mexican painter from Oaxaca. I got the chance to see his work being exhibited at the MUSA (Museum of Arts of the University of Guadalajara). The exhibition was titled “De amor, colores y tierra” (About love, colors and land) and I just loved it. it was so colorful and the worlds he created were so dream-like, it was a real delight! Here, let me show you some of his work:

The featured picture up there is of the inside of Templo Expiatorio and it was taken by Mario Tapia. You should also check his work, he’s got excellent photos from all over Mexico.

Warm Bonfire

inCreactive Experiment Leave a Comment

Warm Bonfire sVdAqcC

This cool animation is the work of the great etall and you can find the source of this GIF in this YouTube video. He made it using a program called Hexels and it was inspired by the video game Dark Souls.

What I did was to turn the video into this looped GIF and I also made sure the dark parts would not animate using a mask. It was made back in back in 2013.

Dark Side of the Moon

inCreactive Experiment, HTML5 Leave a Comment

Here’s a looped video I made using Bit101’s GIF Loop Coder, a really great tool for making looped gifs out of code. I first tried to export it as a gif but the glow and the colors didn’t look right because of the 256 color limit on the gif format. So I made it into a video instead using OBS and Premiere.

Here’s the source code and here is a live demo. I made it resizable, so you can change the parameters on this line of code:”glc.size(600, 600);” and it will look nice as long as you keep both the width and the height values equal to each other.

function onGLC(glc){
  
      glc.size(600, 600);
      glc.loop();
      glc.setDuration(3);
      glc.setFPS(60);
      glc.styles.backgroundColor = "#000000";
      glc.setMode("single");

      var list =  glc.renderList,
                  width = glc.w,
                  height = glc.h, 
                  color = glc.color;

      var rainbowColors = [color.rgba(255,0,0,1),      // Red
                           color.rgba(255,127,0,1),    // Orange
                           color.rgba(255,255,0,1),    // Yellow
                           color.rgba(0,255,0,1),      // Green
                           color.rgba(0,166,234,1),    // Blue
                           color.rgba(127,0,255,1)];   // Violet
      
      var colorLightWidth = width * 0.00833333333333;
      var colorLightSegments = 25;


      // your code goes here:

      addLightRay();
      addRedLight();
      addOrangeLight();
      addYellowLight();
      addGreenLight();
      addBlueLight();
      addVioletLight();
      addLightInisideTriangle();
      addTriangle();

      //addGuides();

      function addTriangle()
      {
            list.addPoly({x: width * 0.5,
                          y: height * 0.43,
                          radius: width * 0.18,
                          sides: 3,
                          rotation: -90,
                          stroke: true,
                          fill: false,
                          lineWidth: width * 0.008333333333,
                          strokeStyle: color.rgba( 255, 255, 255, 1),
                          shadowColor: color.rgba(150,150,255,  1),
                          shadowBlur: [0, width * 0.05],
                          phase: 0.5,
                          shake: 0.5});

            list.addPoly({x: width * 0.5,
                          y: height * 0.43,
                          radius: width * 0.18,
                          sides: 3,
                          rotation: -90,
                          stroke: true,
                          fill: false,
                          lineWidth: width * 0.008333333333,
                          strokeStyle: color.rgba( 255, 255, 255, 1),
                          shadowColor: color.rgba(150,150,255,  1),
                          shadowBlur: [width * 0.05, 0],
                          phase: 0.5,
                          shake: 0});
      }

      function addLightInisideTriangle()
      {
            addQuadSegments({x:0.430, y:0.374},
                            {x:0.556, y:0.346},
                            {x:0.592, y:0.406},
                            {x:0.430, y:0.374},
                            100,
                            [width * 0.001666666667, width * 0.008333333333],
                            [color.rgba(255,255,255,1), color.rgba(0,0,0, 1)]);
      }

      function addQuadSegments(point1, point2, point3, point4, numLines, lineWidth, lineStrokeStyle)
      {
            var currentInitPoint;
            var currentEndPoint;

            for(var i=0; i < numLines; i++){
                  currentInitPoint = interpolatePoints(point1, point4, i/numLines);
                  currentEndPoint = interpolatePoints(point2, point3, i/numLines);
                  addSegment(currentInitPoint.x, currentInitPoint.y, currentEndPoint.x, currentEndPoint.y, lineWidth, lineStrokeStyle);
            }
      }

      function interpolatePoints(initPoint, endPoint, percent)
      {
            var resultPoint = {x:0, y:0};
              
            resultPoint.x = initPoint.x + (endPoint.x - initPoint.x) * percent;
            resultPoint.y = initPoint.y + (endPoint.y - initPoint.y) * percent;
            
            return resultPoint;
      }

      function addLine(percentX0, percentY0, percentX1, percentY1, lineWidth, lineStrokeStyle)
      {
            lineWidth = typeof lineWidth !== 'undefined' ? lineWidth : 1;
            lineStrokeStyle = typeof lineStrokeStyle !== 'undefined' ? lineStrokeStyle : color.rgba(0, 0, 0, 1);

            list.addLine({x0: width * percentX0,
                          y0: height * percentY0,
                          x1: width * percentX1,
                          y1: height * percentY1,
                          lineWidth: lineWidth,
                          strokeStyle: lineStrokeStyle,
                          shadowColor: lineStrokeStyle,
                          shadowBlur: 10});
      }

      function addSegment(percentX0, percentY0, percentX1, percentY1, segmentLineWidth, segmentStrokeStyle, segmentLength, phase)
      {
            segmentLineWidth = typeof segmentLineWidth !== 'undefined' ? segmentLineWidth : 1;
            segmentStrokeStyle = typeof segmentStrokeStyle !== 'undefined' ? segmentStrokeStyle : color.rgba(0, 0, 0, 1);
            segmentLength = typeof segmentLength !== 'undefined' ? segmentLength : Math.random() * 0.05;
            phase = typeof phase !== 'undefined' ? phase : Math.random();


            list.addSegment({x0: width * percentX0,
                             y0: height * percentY0,
                             x1: width * percentX1,
                             y1: height * percentY1,
                             lineWidth: segmentLineWidth,
                             strokeStyle: segmentStrokeStyle,
                             segmentLength: width * segmentLength,
                             phase: phase,
                             shadowColor: segmentStrokeStyle,
                             shadowOffsetX: Math.random() * (width * 0.003333333333) - Math.random() * (width * 0.003333333333),
                             shadowOffsetY: Math.random() * (width * 0.003333333333) - Math.random() * (width * 0.003333333333),
                             shadowBlur: 10});
      }

      function addLightRay()
      {
            var lightRayWidth = width * 0.00333333333333;
            var lightRayColor = color.rgba(255, 255, 255, 1);
            var lightRaySegments = 10;

            for(var i=0; i < lightRaySegments; i++){
                  lightRayColor = color.rgba(255, 255, 255, .75);
                  addSegment(0, 0.488, 0.43, 0.374, lightRayWidth, lightRayColor, 2);
            }
      }

      function addRedLight()
      {
            for(var i=0; i < colorLightSegments; i++){
                  addSegment(0.555, 0.346, 1, 0.414, colorLightWidth * Math.random(), rainbowColors[0]);
                  addSegment(0.562, 0.356, 1, 0.43, colorLightWidth * Math.random(), rainbowColors[0]);
            }
      }

      function addOrangeLight()
      {
            for(var i=0; i < colorLightSegments; i++){
                  addSegment(0.562, 0.356, 1, 0.43, colorLightWidth * Math.random(), rainbowColors[1]);
                  addSegment(0.568, 0.366, 1, 0.448, colorLightWidth * Math.random(), rainbowColors[1]);
            }
      }

      function addYellowLight()
      {
            for(var i=0; i < colorLightSegments; i++){
                  addSegment(0.568, 0.366, 1, 0.448, colorLightWidth * Math.random(), rainbowColors[2]);
                  addSegment(0.574, 0.376, 1, 0.464, colorLightWidth * Math.random(), rainbowColors[2]);
            }
      }

      function addGreenLight()
      {
            for(var i=0; i < colorLightSegments; i++){
                  addSegment(0.574, 0.376, 1, 0.464, colorLightWidth * Math.random(), rainbowColors[3]);
                  addSegment(0.58, 0.386, 1, 0.48, colorLightWidth * Math.random(), rainbowColors[3]);
            }
      }

      function addBlueLight()
      {
            for(var i=0; i < colorLightSegments; i++){
                  addSegment(0.58, 0.386, 1, 0.48, colorLightWidth * Math.random(), rainbowColors[4]);
                  addSegment(0.586, 0.396, 1, 0.496, colorLightWidth * Math.random(), rainbowColors[4]);
            }
      }

      function addVioletLight()
      {
            for(var i=0; i < colorLightSegments; i++){
                  addSegment(0.586, 0.396, 1, 0.496, colorLightWidth * Math.random(), rainbowColors[5]);
                  addSegment(0.592, 0.406, 1, 0.512, colorLightWidth * Math.random(), rainbowColors[5]);
            }
      }

      function addGuides()
      {
            var guidesLineWidth = 1;
            var guidesColor = color.rgba(255, 255, 255, 1);

            function addVerticalGuide(percentageX){
                  addLine(percentageX, 0, percentageX, height, guidesLineWidth, guidesColor);
            }

            function addHorizontalGuide(percentageY){
                  addLine(0, percentageY, width, percentageY, guidesLineWidth, guidesColor);
            }

            // Triangular Prism Guides
            addVerticalGuide( 0.5 );
            addVerticalGuide( 0.344 );
            addVerticalGuide( 0.656 );

            addHorizontalGuide( 0.248 );
            addHorizontalGuide( 0.52 );

            // Light Ray Guides
            addHorizontalGuide( 0.488 );
            addHorizontalGuide( 0.374 );
            addVerticalGuide( 0.43 );

            // Red Light Guides
            addVerticalGuide( 0.555 );
            addHorizontalGuide( 0.346 );
            addHorizontalGuide( 0.414 );

            // Orange Light Guides
            addVerticalGuide( 0.562 );
            addHorizontalGuide( 0.356 );
            addHorizontalGuide( 0.43 );

            // Yellow Light Guides
            addVerticalGuide( 0.574 );
            addHorizontalGuide( 0.376 );

            addHorizontalGuide( 0.464 );

            // Green Light Guides
            addVerticalGuide( 0.58 );
            addHorizontalGuide( 0.386 );
            addHorizontalGuide( 0.48 );

            // Blue Light Guides
            addVerticalGuide( 0.586 );
            addHorizontalGuide( 0.396 );
            addHorizontalGuide( 0.496 );

            // Violet Light Guides
            addVerticalGuide( 0.592 );
            addHorizontalGuide( 0.406 );
            addHorizontalGuide( 0.512 );

      }

}

Minecraft Templar Knight

inCreactive Games Leave a Comment

Here’s a statue of a Templar Knight I entered into a Minecraft building contest, held by HC Server back in December of 2011. The theme for this contest was “Medieval” and we were constrained by a plot of land of size 36 x 51 blocks at sea level. Another constraint I had was the vertical limit of the map which at the time was still 127 blocks (63 from sea level).

I ended up winning the contest 🙂 and, If I remember correctly, the prize consisted of  getting special privileges inside the server, like the ability to fly around and also the ability to spawn most types of blocks, which was something you had to pay money to be able to do.

I used a program called Binvox to turn this free 3D model into voxels (blocks), and output a schematic file that I then import using MCEdit into a local world in creative mode. After that, I had to replace all the blocks (which were all of the same type) one by one, in order to add color and texture to the different parts of the model, including the clothes, the helmet, the red cross in the back of the shield, the sword and even the platform on which the statue is standing. Once I was happy with all the details I opened up two instances of Minecraft, one for the local world and the other for the server world. Then I started to go back and forth making a copy of the statue on the server, again block by block, and this time, without the ability to fly around.

After winning the contest I also made a really big, fully automatic, sugar cane farm on the same server. I used tons of redstone, pistons and water blocks to make it, and it looked like four tall buildings that reached all the way to the sky with a collection center in the middle. I only had to step on a plate and the whole computer would lag for like a minute because I was collecting hundreds of canes at a time. It was awesome.

Anyways, here’s a complete album with all the screen-shots I saved from of contest, it also contains images of the entries that won 2nd and 3rd place, they were a theatre and a village respectively.